{"diffoscope-json-version": 1, "source1": "/input1", "source2": "/input2", "unified_diff": null, "details": [{"source1": "zipinfo {}", "source2": "zipinfo {}", "unified_diff": "@@ -1,8 +1,8 @@\n-Zip file size: 885723 bytes, number of entries: 414\n+Zip file size: 887129 bytes, number of entries: 414\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 META-INF/\n -rw-r--r--  2.0 unx      319 b- defN 24-Jun-27 22:41 META-INF/MANIFEST.MF\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/org.apache.nifi/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/org.apache.nifi/nifi-airtable-nar/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/org.apache.nifi.processors.airtable.QueryAirtableTable/\n@@ -248,15 +248,15 @@\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M4/org.apache.nifi.services.zendesk.ZendeskRecordSink/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 META-INF/maven/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 META-INF/maven/org.apache.nifi/\n drwxr-xr-x  2.0 unx        0 b- stor 24-Jun-27 22:41 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/\n -rw-r--r--  2.0 unx    47134 b- defN 24-Jun-27 22:41 META-INF/DEPENDENCIES\n -rw-r--r--  2.0 unx    11358 b- defN 24-Jun-27 22:41 META-INF/LICENSE\n -rw-r--r--  2.0 unx      160 b- defN 24-Jun-27 22:41 META-INF/NOTICE\n--rw-r--r--  2.0 unx     1293 b- defN 24-Jun-27 22:41 build.properties\n+-rw-r--r--  2.0 unx     1188 b- defN 24-Jun-27 22:41 build.properties\n -rw-r--r--  2.0 unx     2722 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-airtable-nar/2.0.0-M4/org.apache.nifi.processors.airtable.QueryAirtableTable/additionalDetails.html\n -rw-r--r--  2.0 unx     4031 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-amqp-nar/2.0.0-M4/org.apache.nifi.amqp.processors.ConsumeAMQP/additionalDetails.html\n -rw-r--r--  2.0 unx     5854 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-amqp-nar/2.0.0-M4/org.apache.nifi.amqp.processors.PublishAMQP/additionalDetails.html\n -rw-r--r--  2.0 unx     5394 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-asana-processors-nar/2.0.0-M4/org.apache.nifi.processors.asana.GetAsanaObject/additionalDetails.html\n -rw-r--r--  2.0 unx     2597 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-aws-nar/2.0.0-M4/org.apache.nifi.parameter.aws.AwsSecretsManagerParameterProvider/additionalDetails.html\n -rw-r--r--  2.0 unx    12176 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-aws-nar/2.0.0-M4/org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord/additionalDetails.html\n -rw-r--r--  2.0 unx     2407 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-aws-nar/2.0.0-M4/org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream/additionalDetails.html\n@@ -406,11 +406,11 @@\n -rw-r--r--  2.0 unx    21040 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-update-attribute-nar/2.0.0-M4/org.apache.nifi.processors.attributes.UpdateAttribute/additionalDetails.html\n -rw-r--r--  2.0 unx     2308 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-websocket-processors-nar/2.0.0-M4/org.apache.nifi.processors.websocket.ConnectWebSocket/additionalDetails.html\n -rw-r--r--  2.0 unx     4150 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-windows-event-log-nar/2.0.0-M4/org.apache.nifi.processors.windows.event.log.ConsumeWindowsEventLog/additionalDetails.html\n -rw-r--r--  2.0 unx     2772 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-workday-processors-nar/2.0.0-M4/org.apache.nifi.processors.workday.GetWorkdayReport/additionalDetails.html\n -rw-r--r--  2.0 unx     3375 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M4/org.apache.nifi.processors.zendesk.GetZendesk/additionalDetails.html\n -rw-r--r--  2.0 unx     7289 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-zendesk-nar/2.0.0-M4/org.apache.nifi.processors.zendesk.PutZendeskTicket/additionalDetails.html\n -rw-r--r--  2.0 unx     7449 b- defN 24-Jun-27 22:41 docs/org.apache.nifi/nifi-zendesk-services-nar/2.0.0-M4/org.apache.nifi.services.zendesk.ZendeskRecordSink/additionalDetails.html\n--rw-r--r--  2.0 unx  4330847 b- defN 24-Jun-27 22:41 nifi-runtime-manifest.json\n+-rw-r--r--  2.0 unx  4330823 b- defN 24-Jun-27 22:41 nifi-runtime-manifest.json\n -rw-r--r--  2.0 unx     7850 b- defN 24-Jun-27 22:41 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.xml\n -rw-r--r--  2.0 unx       74 b- defN 24-Jun-27 22:41 META-INF/maven/org.apache.nifi/nifi-runtime-manifest/pom.properties\n-414 files, 5368830 bytes uncompressed, 773421 bytes compressed:  85.6%\n+414 files, 5368701 bytes uncompressed, 774827 bytes compressed:  85.6%\n"}, {"source1": "zipdetails --redact --scan --utc {}", "source2": "zipdetails --redact --scan --utc {}", "unified_diff": "@@ -4569,16570 +4569,16570 @@\n 08C69 Extract Zip Spec      14 (20) '2.0'\n 08C6A Extract OS            00 (0) 'MS-DOS'\n 08C6B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n 08C6D Compression Method    0008 (8) 'Deflated'\n 08C6F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-08C73 CRC                   091B3793 (152778643)\n-08C77 Compressed Size       000002EC (748)\n-08C7B Uncompressed Size     0000050D (1293)\n+08C73 CRC                   92D455DD (2463389149)\n+08C77 Compressed Size       000002BA (698)\n+08C7B Uncompressed Size     000004A4 (1188)\n 08C7F Filename Length       0010 (16)\n 08C81 Extra Length          0000 (0)\n 08C83 Filename              'XXXXXXXXXXXXXXXX'\n #\n # WARNING: Offset 0x8C83: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n 08C93 PAYLOAD\n \n-08F7F LOCAL HEADER #255     04034B50 (67324752)\n-08F83 Extract Zip Spec      14 (20) '2.0'\n-08F84 Extract OS            00 (0) 'MS-DOS'\n-08F85 General Purpose Flag  0800 (2048)\n+08F4D LOCAL HEADER #255     04034B50 (67324752)\n+08F51 Extract Zip Spec      14 (20) '2.0'\n+08F52 Extract OS            00 (0) 'MS-DOS'\n+08F53 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-08F87 Compression Method    0008 (8) 'Deflated'\n-08F89 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-08F8D CRC                   9CB4EC6B (2629102699)\n-08F91 Compressed Size       00000546 (1350)\n-08F95 Uncompressed Size     00000AA2 (2722)\n-08F99 Filename Length       007D (125)\n-08F9B Extra Length          0000 (0)\n-08F9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+08F55 Compression Method    0008 (8) 'Deflated'\n+08F57 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+08F5B CRC                   9CB4EC6B (2629102699)\n+08F5F Compressed Size       00000546 (1350)\n+08F63 Uncompressed Size     00000AA2 (2722)\n+08F67 Filename Length       007D (125)\n+08F69 Extra Length          0000 (0)\n+08F6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x8F9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x8F6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0901A PAYLOAD\n+08FE8 PAYLOAD\n \n-09560 LOCAL HEADER #256     04034B50 (67324752)\n-09564 Extract Zip Spec      14 (20) '2.0'\n-09565 Extract OS            00 (0) 'MS-DOS'\n-09566 General Purpose Flag  0800 (2048)\n+0952E LOCAL HEADER #256     04034B50 (67324752)\n+09532 Extract Zip Spec      14 (20) '2.0'\n+09533 Extract OS            00 (0) 'MS-DOS'\n+09534 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09568 Compression Method    0008 (8) 'Deflated'\n-0956A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0956E CRC                   445AD7B2 (1146804146)\n-09572 Compressed Size       000006D4 (1748)\n-09576 Uncompressed Size     00000FBF (4031)\n-0957A Filename Length       006E (110)\n-0957C Extra Length          0000 (0)\n-0957E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09536 Compression Method    0008 (8) 'Deflated'\n+09538 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0953C CRC                   445AD7B2 (1146804146)\n+09540 Compressed Size       000006D4 (1748)\n+09544 Uncompressed Size     00000FBF (4031)\n+09548 Filename Length       006E (110)\n+0954A Extra Length          0000 (0)\n+0954C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x957E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x954C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-095EC PAYLOAD\n+095BA PAYLOAD\n \n-09CC0 LOCAL HEADER #257     04034B50 (67324752)\n-09CC4 Extract Zip Spec      14 (20) '2.0'\n-09CC5 Extract OS            00 (0) 'MS-DOS'\n-09CC6 General Purpose Flag  0800 (2048)\n+09C8E LOCAL HEADER #257     04034B50 (67324752)\n+09C92 Extract Zip Spec      14 (20) '2.0'\n+09C93 Extract OS            00 (0) 'MS-DOS'\n+09C94 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-09CC8 Compression Method    0008 (8) 'Deflated'\n-09CCA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-09CCE CRC                   A2A96EA2 (2729012898)\n-09CD2 Compressed Size       0000092B (2347)\n-09CD6 Uncompressed Size     000016DE (5854)\n-09CDA Filename Length       006E (110)\n-09CDC Extra Length          0000 (0)\n-09CDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+09C96 Compression Method    0008 (8) 'Deflated'\n+09C98 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+09C9C CRC                   A2A96EA2 (2729012898)\n+09CA0 Compressed Size       0000092B (2347)\n+09CA4 Uncompressed Size     000016DE (5854)\n+09CA8 Filename Length       006E (110)\n+09CAA Extra Length          0000 (0)\n+09CAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x9CDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x9CAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-09D4C PAYLOAD\n+09D1A PAYLOAD\n \n-0A677 LOCAL HEADER #258     04034B50 (67324752)\n-0A67B Extract Zip Spec      14 (20) '2.0'\n-0A67C Extract OS            00 (0) 'MS-DOS'\n-0A67D General Purpose Flag  0800 (2048)\n+0A645 LOCAL HEADER #258     04034B50 (67324752)\n+0A649 Extract Zip Spec      14 (20) '2.0'\n+0A64A Extract OS            00 (0) 'MS-DOS'\n+0A64B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0A67F Compression Method    0008 (8) 'Deflated'\n-0A681 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0A685 CRC                   7416DF2A (1947655978)\n-0A689 Compressed Size       0000091D (2333)\n-0A68D Uncompressed Size     00001512 (5394)\n-0A691 Filename Length       007E (126)\n-0A693 Extra Length          0000 (0)\n-0A695 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0A64D Compression Method    0008 (8) 'Deflated'\n+0A64F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0A653 CRC                   7416DF2A (1947655978)\n+0A657 Compressed Size       0000091D (2333)\n+0A65B Uncompressed Size     00001512 (5394)\n+0A65F Filename Length       007E (126)\n+0A661 Extra Length          0000 (0)\n+0A663 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xA695: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xA663: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0A713 PAYLOAD\n+0A6E1 PAYLOAD\n \n-0B030 LOCAL HEADER #259     04034B50 (67324752)\n-0B034 Extract Zip Spec      14 (20) '2.0'\n-0B035 Extract OS            00 (0) 'MS-DOS'\n-0B036 General Purpose Flag  0800 (2048)\n+0AFFE LOCAL HEADER #259     04034B50 (67324752)\n+0B002 Extract Zip Spec      14 (20) '2.0'\n+0B003 Extract OS            00 (0) 'MS-DOS'\n+0B004 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B038 Compression Method    0008 (8) 'Deflated'\n-0B03A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0B03E CRC                   15D4B854 (366262356)\n-0B042 Compressed Size       000004BB (1211)\n-0B046 Uncompressed Size     00000A25 (2597)\n-0B04A Filename Length       0082 (130)\n-0B04C Extra Length          0000 (0)\n-0B04E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B006 Compression Method    0008 (8) 'Deflated'\n+0B008 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0B00C CRC                   15D4B854 (366262356)\n+0B010 Compressed Size       000004BB (1211)\n+0B014 Uncompressed Size     00000A25 (2597)\n+0B018 Filename Length       0082 (130)\n+0B01A Extra Length          0000 (0)\n+0B01C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB04E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB01C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B0D0 PAYLOAD\n+0B09E PAYLOAD\n \n-0B58B LOCAL HEADER #260     04034B50 (67324752)\n-0B58F Extract Zip Spec      14 (20) '2.0'\n-0B590 Extract OS            00 (0) 'MS-DOS'\n-0B591 General Purpose Flag  0800 (2048)\n+0B559 LOCAL HEADER #260     04034B50 (67324752)\n+0B55D Extract Zip Spec      14 (20) '2.0'\n+0B55E Extract OS            00 (0) 'MS-DOS'\n+0B55F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0B593 Compression Method    0008 (8) 'Deflated'\n-0B595 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0B599 CRC                   826E1CC4 (2188254404)\n-0B59D Compressed Size       00000DE0 (3552)\n-0B5A1 Uncompressed Size     00002F90 (12176)\n-0B5A5 Filename Length       007B (123)\n-0B5A7 Extra Length          0000 (0)\n-0B5A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0B561 Compression Method    0008 (8) 'Deflated'\n+0B563 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0B567 CRC                   826E1CC4 (2188254404)\n+0B56B Compressed Size       00000DE0 (3552)\n+0B56F Uncompressed Size     00002F90 (12176)\n+0B573 Filename Length       007B (123)\n+0B575 Extra Length          0000 (0)\n+0B577 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xB5A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xB577: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0B624 PAYLOAD\n+0B5F2 PAYLOAD\n \n-0C404 LOCAL HEADER #261     04034B50 (67324752)\n-0C408 Extract Zip Spec      14 (20) '2.0'\n-0C409 Extract OS            00 (0) 'MS-DOS'\n-0C40A General Purpose Flag  0800 (2048)\n+0C3D2 LOCAL HEADER #261     04034B50 (67324752)\n+0C3D6 Extract Zip Spec      14 (20) '2.0'\n+0C3D7 Extract OS            00 (0) 'MS-DOS'\n+0C3D8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C40C Compression Method    0008 (8) 'Deflated'\n-0C40E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0C412 CRC                   1BE163AC (467755948)\n-0C416 Compressed Size       00000476 (1142)\n-0C41A Uncompressed Size     00000967 (2407)\n-0C41E Filename Length       0084 (132)\n-0C420 Extra Length          0000 (0)\n-0C422 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0C3DA Compression Method    0008 (8) 'Deflated'\n+0C3DC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0C3E0 CRC                   1BE163AC (467755948)\n+0C3E4 Compressed Size       00000476 (1142)\n+0C3E8 Uncompressed Size     00000967 (2407)\n+0C3EC Filename Length       0084 (132)\n+0C3EE Extra Length          0000 (0)\n+0C3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xC422: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C4A6 PAYLOAD\n+0C474 PAYLOAD\n \n-0C91C LOCAL HEADER #262     04034B50 (67324752)\n-0C920 Extract Zip Spec      14 (20) '2.0'\n-0C921 Extract OS            00 (0) 'MS-DOS'\n-0C922 General Purpose Flag  0800 (2048)\n+0C8EA LOCAL HEADER #262     04034B50 (67324752)\n+0C8EE Extract Zip Spec      14 (20) '2.0'\n+0C8EF Extract OS            00 (0) 'MS-DOS'\n+0C8F0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0C924 Compression Method    0008 (8) 'Deflated'\n-0C926 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0C92A CRC                   11DB1110 (299569424)\n-0C92E Compressed Size       00000428 (1064)\n-0C932 Uncompressed Size     0000080F (2063)\n-0C936 Filename Length       007E (126)\n-0C938 Extra Length          0000 (0)\n-0C93A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0C8F2 Compression Method    0008 (8) 'Deflated'\n+0C8F4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0C8F8 CRC                   11DB1110 (299569424)\n+0C8FC Compressed Size       00000428 (1064)\n+0C900 Uncompressed Size     0000080F (2063)\n+0C904 Filename Length       007E (126)\n+0C906 Extra Length          0000 (0)\n+0C908 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC93A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC908: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0C9B8 PAYLOAD\n+0C986 PAYLOAD\n \n-0CDE0 LOCAL HEADER #263     04034B50 (67324752)\n-0CDE4 Extract Zip Spec      14 (20) '2.0'\n-0CDE5 Extract OS            00 (0) 'MS-DOS'\n-0CDE6 General Purpose Flag  0800 (2048)\n+0CDAE LOCAL HEADER #263     04034B50 (67324752)\n+0CDB2 Extract Zip Spec      14 (20) '2.0'\n+0CDB3 Extract OS            00 (0) 'MS-DOS'\n+0CDB4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0CDE8 Compression Method    0008 (8) 'Deflated'\n-0CDEA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0CDEE CRC                   30A69673 (816223859)\n-0CDF2 Compressed Size       000005CE (1486)\n-0CDF6 Uncompressed Size     00000C1C (3100)\n-0CDFA Filename Length       007A (122)\n-0CDFC Extra Length          0000 (0)\n-0CDFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0CDB6 Compression Method    0008 (8) 'Deflated'\n+0CDB8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0CDBC CRC                   30A69673 (816223859)\n+0CDC0 Compressed Size       000005CE (1486)\n+0CDC4 Uncompressed Size     00000C1C (3100)\n+0CDC8 Filename Length       007A (122)\n+0CDCA Extra Length          0000 (0)\n+0CDCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0CE78 PAYLOAD\n+0CE46 PAYLOAD\n \n-0D446 LOCAL HEADER #264     04034B50 (67324752)\n-0D44A Extract Zip Spec      14 (20) '2.0'\n-0D44B Extract OS            00 (0) 'MS-DOS'\n-0D44C General Purpose Flag  0800 (2048)\n+0D414 LOCAL HEADER #264     04034B50 (67324752)\n+0D418 Extract Zip Spec      14 (20) '2.0'\n+0D419 Extract OS            00 (0) 'MS-DOS'\n+0D41A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D44E Compression Method    0008 (8) 'Deflated'\n-0D450 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0D454 CRC                   0C316B32 (204565298)\n-0D458 Compressed Size       000003A1 (929)\n-0D45C Uncompressed Size     000006D7 (1751)\n-0D460 Filename Length       0084 (132)\n-0D462 Extra Length          0000 (0)\n-0D464 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0D41C Compression Method    0008 (8) 'Deflated'\n+0D41E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0D422 CRC                   0C316B32 (204565298)\n+0D426 Compressed Size       000003A1 (929)\n+0D42A Uncompressed Size     000006D7 (1751)\n+0D42E Filename Length       0084 (132)\n+0D430 Extra Length          0000 (0)\n+0D432 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD464: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD432: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D4E8 PAYLOAD\n+0D4B6 PAYLOAD\n \n-0D889 LOCAL HEADER #265     04034B50 (67324752)\n-0D88D Extract Zip Spec      14 (20) '2.0'\n-0D88E Extract OS            00 (0) 'MS-DOS'\n-0D88F General Purpose Flag  0800 (2048)\n+0D857 LOCAL HEADER #265     04034B50 (67324752)\n+0D85B Extract Zip Spec      14 (20) '2.0'\n+0D85C Extract OS            00 (0) 'MS-DOS'\n+0D85D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0D891 Compression Method    0008 (8) 'Deflated'\n-0D893 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0D897 CRC                   37BEEC96 (935259286)\n-0D89B Compressed Size       000006C9 (1737)\n-0D89F Uncompressed Size     0000133B (4923)\n-0D8A3 Filename Length       0080 (128)\n-0D8A5 Extra Length          0000 (0)\n-0D8A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0D85F Compression Method    0008 (8) 'Deflated'\n+0D861 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0D865 CRC                   37BEEC96 (935259286)\n+0D869 Compressed Size       000006C9 (1737)\n+0D86D Uncompressed Size     0000133B (4923)\n+0D871 Filename Length       0080 (128)\n+0D873 Extra Length          0000 (0)\n+0D875 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD8A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD875: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0D927 PAYLOAD\n+0D8F5 PAYLOAD\n \n-0DFF0 LOCAL HEADER #266     04034B50 (67324752)\n-0DFF4 Extract Zip Spec      14 (20) '2.0'\n-0DFF5 Extract OS            00 (0) 'MS-DOS'\n-0DFF6 General Purpose Flag  0800 (2048)\n+0DFBE LOCAL HEADER #266     04034B50 (67324752)\n+0DFC2 Extract Zip Spec      14 (20) '2.0'\n+0DFC3 Extract OS            00 (0) 'MS-DOS'\n+0DFC4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0DFF8 Compression Method    0008 (8) 'Deflated'\n-0DFFA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0DFFE CRC                   D0AE7BE4 (3501095908)\n-0E002 Compressed Size       000003D9 (985)\n-0E006 Uncompressed Size     0000074C (1868)\n-0E00A Filename Length       0088 (136)\n-0E00C Extra Length          0000 (0)\n-0E00E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0DFC6 Compression Method    0008 (8) 'Deflated'\n+0DFC8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0DFCC CRC                   D0AE7BE4 (3501095908)\n+0DFD0 Compressed Size       000003D9 (985)\n+0DFD4 Uncompressed Size     0000074C (1868)\n+0DFD8 Filename Length       0088 (136)\n+0DFDA Extra Length          0000 (0)\n+0DFDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0xE00E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xDFDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E096 PAYLOAD\n+0E064 PAYLOAD\n \n-0E46F LOCAL HEADER #267     04034B50 (67324752)\n-0E473 Extract Zip Spec      14 (20) '2.0'\n-0E474 Extract OS            00 (0) 'MS-DOS'\n-0E475 General Purpose Flag  0800 (2048)\n+0E43D LOCAL HEADER #267     04034B50 (67324752)\n+0E441 Extract Zip Spec      14 (20) '2.0'\n+0E442 Extract OS            00 (0) 'MS-DOS'\n+0E443 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0E477 Compression Method    0008 (8) 'Deflated'\n-0E479 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0E47D CRC                   4C134CE6 (1276333286)\n-0E481 Compressed Size       000006D5 (1749)\n-0E485 Uncompressed Size     0000103C (4156)\n-0E489 Filename Length       0084 (132)\n-0E48B Extra Length          0000 (0)\n-0E48D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0E445 Compression Method    0008 (8) 'Deflated'\n+0E447 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0E44B CRC                   4C134CE6 (1276333286)\n+0E44F Compressed Size       000006D5 (1749)\n+0E453 Uncompressed Size     0000103C (4156)\n+0E457 Filename Length       0084 (132)\n+0E459 Extra Length          0000 (0)\n+0E45B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xE48D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xE45B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0E511 PAYLOAD\n+0E4DF PAYLOAD\n \n-0EBE6 LOCAL HEADER #268     04034B50 (67324752)\n-0EBEA Extract Zip Spec      14 (20) '2.0'\n-0EBEB Extract OS            00 (0) 'MS-DOS'\n-0EBEC General Purpose Flag  0800 (2048)\n+0EBB4 LOCAL HEADER #268     04034B50 (67324752)\n+0EBB8 Extract Zip Spec      14 (20) '2.0'\n+0EBB9 Extract OS            00 (0) 'MS-DOS'\n+0EBBA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0EBEE Compression Method    0008 (8) 'Deflated'\n-0EBF0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0EBF4 CRC                   63086228 (1661493800)\n-0EBF8 Compressed Size       00000430 (1072)\n-0EBFC Uncompressed Size     00000838 (2104)\n-0EC00 Filename Length       0086 (134)\n-0EC02 Extra Length          0000 (0)\n-0EC04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+0EBBC Compression Method    0008 (8) 'Deflated'\n+0EBBE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0EBC2 CRC                   63086228 (1661493800)\n+0EBC6 Compressed Size       00000430 (1072)\n+0EBCA Uncompressed Size     00000838 (2104)\n+0EBCE Filename Length       0086 (134)\n+0EBD0 Extra Length          0000 (0)\n+0EBD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0xEC04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xEBD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0EC8A PAYLOAD\n+0EC58 PAYLOAD\n \n-0F0BA LOCAL HEADER #269     04034B50 (67324752)\n-0F0BE Extract Zip Spec      14 (20) '2.0'\n-0F0BF Extract OS            00 (0) 'MS-DOS'\n-0F0C0 General Purpose Flag  0800 (2048)\n+0F088 LOCAL HEADER #269     04034B50 (67324752)\n+0F08C Extract Zip Spec      14 (20) '2.0'\n+0F08D Extract OS            00 (0) 'MS-DOS'\n+0F08E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F0C2 Compression Method    0008 (8) 'Deflated'\n-0F0C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0F0C8 CRC                   9EF621C1 (2666930625)\n-0F0CC Compressed Size       000005D9 (1497)\n-0F0D0 Uncompressed Size     00000C90 (3216)\n-0F0D4 Filename Length       0082 (130)\n-0F0D6 Extra Length          0000 (0)\n-0F0D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F090 Compression Method    0008 (8) 'Deflated'\n+0F092 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0F096 CRC                   9EF621C1 (2666930625)\n+0F09A Compressed Size       000005D9 (1497)\n+0F09E Uncompressed Size     00000C90 (3216)\n+0F0A2 Filename Length       0082 (130)\n+0F0A4 Extra Length          0000 (0)\n+0F0A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF0D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF0A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F15A PAYLOAD\n+0F128 PAYLOAD\n \n-0F733 LOCAL HEADER #270     04034B50 (67324752)\n-0F737 Extract Zip Spec      14 (20) '2.0'\n-0F738 Extract OS            00 (0) 'MS-DOS'\n-0F739 General Purpose Flag  0800 (2048)\n+0F701 LOCAL HEADER #270     04034B50 (67324752)\n+0F705 Extract Zip Spec      14 (20) '2.0'\n+0F706 Extract OS            00 (0) 'MS-DOS'\n+0F707 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0F73B Compression Method    0008 (8) 'Deflated'\n-0F73D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0F741 CRC                   6BE0FFE8 (1809907688)\n-0F745 Compressed Size       00000687 (1671)\n-0F749 Uncompressed Size     00000EF6 (3830)\n-0F74D Filename Length       006A (106)\n-0F74F Extra Length          0000 (0)\n-0F751 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0F709 Compression Method    0008 (8) 'Deflated'\n+0F70B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0F70F CRC                   6BE0FFE8 (1809907688)\n+0F713 Compressed Size       00000687 (1671)\n+0F717 Uncompressed Size     00000EF6 (3830)\n+0F71B Filename Length       006A (106)\n+0F71D Extra Length          0000 (0)\n+0F71F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xF751: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xF71F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0F7BB PAYLOAD\n+0F789 PAYLOAD\n \n-0FE42 LOCAL HEADER #271     04034B50 (67324752)\n-0FE46 Extract Zip Spec      14 (20) '2.0'\n-0FE47 Extract OS            00 (0) 'MS-DOS'\n-0FE48 General Purpose Flag  0800 (2048)\n+0FE10 LOCAL HEADER #271     04034B50 (67324752)\n+0FE14 Extract Zip Spec      14 (20) '2.0'\n+0FE15 Extract OS            00 (0) 'MS-DOS'\n+0FE16 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-0FE4A Compression Method    0008 (8) 'Deflated'\n-0FE4C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-0FE50 CRC                   8743913D (2269352253)\n-0FE54 Compressed Size       000005DE (1502)\n-0FE58 Uncompressed Size     00000C44 (3140)\n-0FE5C Filename Length       006F (111)\n-0FE5E Extra Length          0000 (0)\n-0FE60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+0FE18 Compression Method    0008 (8) 'Deflated'\n+0FE1A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+0FE1E CRC                   8743913D (2269352253)\n+0FE22 Compressed Size       000005DE (1502)\n+0FE26 Uncompressed Size     00000C44 (3140)\n+0FE2A Filename Length       006F (111)\n+0FE2C Extra Length          0000 (0)\n+0FE2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xFE60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xFE2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-0FECF PAYLOAD\n+0FE9D PAYLOAD\n \n-104AD LOCAL HEADER #272     04034B50 (67324752)\n-104B1 Extract Zip Spec      14 (20) '2.0'\n-104B2 Extract OS            00 (0) 'MS-DOS'\n-104B3 General Purpose Flag  0800 (2048)\n+1047B LOCAL HEADER #272     04034B50 (67324752)\n+1047F Extract Zip Spec      14 (20) '2.0'\n+10480 Extract OS            00 (0) 'MS-DOS'\n+10481 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-104B5 Compression Method    0008 (8) 'Deflated'\n-104B7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-104BB CRC                   07A59EC9 (128294601)\n-104BF Compressed Size       000004D1 (1233)\n-104C3 Uncompressed Size     00000C29 (3113)\n-104C7 Filename Length       008A (138)\n-104C9 Extra Length          0000 (0)\n-104CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+10483 Compression Method    0008 (8) 'Deflated'\n+10485 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+10489 CRC                   07A59EC9 (128294601)\n+1048D Compressed Size       000004D1 (1233)\n+10491 Uncompressed Size     00000C29 (3113)\n+10495 Filename Length       008A (138)\n+10497 Extra Length          0000 (0)\n+10499 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXX'\n #\n-# WARNING: Offset 0x104CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10499: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10555 PAYLOAD\n+10523 PAYLOAD\n \n-10A26 LOCAL HEADER #273     04034B50 (67324752)\n-10A2A Extract Zip Spec      14 (20) '2.0'\n-10A2B Extract OS            00 (0) 'MS-DOS'\n-10A2C General Purpose Flag  0800 (2048)\n+109F4 LOCAL HEADER #273     04034B50 (67324752)\n+109F8 Extract Zip Spec      14 (20) '2.0'\n+109F9 Extract OS            00 (0) 'MS-DOS'\n+109FA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10A2E Compression Method    0008 (8) 'Deflated'\n-10A30 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-10A34 CRC                   FD79F819 (4252629017)\n-10A38 Compressed Size       00000498 (1176)\n-10A3C Uncompressed Size     00000A3A (2618)\n-10A40 Filename Length       0089 (137)\n-10A42 Extra Length          0000 (0)\n-10A44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+109FC Compression Method    0008 (8) 'Deflated'\n+109FE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+10A02 CRC                   FD79F819 (4252629017)\n+10A06 Compressed Size       00000498 (1176)\n+10A0A Uncompressed Size     00000A3A (2618)\n+10A0E Filename Length       0089 (137)\n+10A10 Extra Length          0000 (0)\n+10A12 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXX'\n #\n-# WARNING: Offset 0x10A44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10A12: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-10ACD PAYLOAD\n+10A9B PAYLOAD\n \n-10F65 LOCAL HEADER #274     04034B50 (67324752)\n-10F69 Extract Zip Spec      14 (20) '2.0'\n-10F6A Extract OS            00 (0) 'MS-DOS'\n-10F6B General Purpose Flag  0800 (2048)\n+10F33 LOCAL HEADER #274     04034B50 (67324752)\n+10F37 Extract Zip Spec      14 (20) '2.0'\n+10F38 Extract OS            00 (0) 'MS-DOS'\n+10F39 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-10F6D Compression Method    0008 (8) 'Deflated'\n-10F6F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-10F73 CRC                   63D24DDE (1674726878)\n-10F77 Compressed Size       0000046A (1130)\n-10F7B Uncompressed Size     00000E46 (3654)\n-10F7F Filename Length       0084 (132)\n-10F81 Extra Length          0000 (0)\n-10F83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+10F3B Compression Method    0008 (8) 'Deflated'\n+10F3D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+10F41 CRC                   63D24DDE (1674726878)\n+10F45 Compressed Size       0000046A (1130)\n+10F49 Uncompressed Size     00000E46 (3654)\n+10F4D Filename Length       0084 (132)\n+10F4F Extra Length          0000 (0)\n+10F51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0x10F83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x10F51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11007 PAYLOAD\n+10FD5 PAYLOAD\n \n-11471 LOCAL HEADER #275     04034B50 (67324752)\n-11475 Extract Zip Spec      14 (20) '2.0'\n-11476 Extract OS            00 (0) 'MS-DOS'\n-11477 General Purpose Flag  0800 (2048)\n+1143F LOCAL HEADER #275     04034B50 (67324752)\n+11443 Extract Zip Spec      14 (20) '2.0'\n+11444 Extract OS            00 (0) 'MS-DOS'\n+11445 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11479 Compression Method    0008 (8) 'Deflated'\n-1147B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1147F CRC                   2E17013D (773259581)\n-11483 Compressed Size       0000043F (1087)\n-11487 Uncompressed Size     00000888 (2184)\n-1148B Filename Length       008B (139)\n-1148D Extra Length          0000 (0)\n-1148F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+11447 Compression Method    0008 (8) 'Deflated'\n+11449 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1144D CRC                   2E17013D (773259581)\n+11451 Compressed Size       0000043F (1087)\n+11455 Uncompressed Size     00000888 (2184)\n+11459 Filename Length       008B (139)\n+1145B Extra Length          0000 (0)\n+1145D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXX'\n #\n-# WARNING: Offset 0x1148F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1145D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1151A PAYLOAD\n+114E8 PAYLOAD\n \n-11959 LOCAL HEADER #276     04034B50 (67324752)\n-1195D Extract Zip Spec      14 (20) '2.0'\n-1195E Extract OS            00 (0) 'MS-DOS'\n-1195F General Purpose Flag  0800 (2048)\n+11927 LOCAL HEADER #276     04034B50 (67324752)\n+1192B Extract Zip Spec      14 (20) '2.0'\n+1192C Extract OS            00 (0) 'MS-DOS'\n+1192D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11961 Compression Method    0008 (8) 'Deflated'\n-11963 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-11967 CRC                   C1E5A225 (3253051941)\n-1196B Compressed Size       000003A3 (931)\n-1196F Uncompressed Size     0000070B (1803)\n-11973 Filename Length       006D (109)\n-11975 Extra Length          0000 (0)\n-11977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1192F Compression Method    0008 (8) 'Deflated'\n+11931 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+11935 CRC                   C1E5A225 (3253051941)\n+11939 Compressed Size       000003A3 (931)\n+1193D Uncompressed Size     0000070B (1803)\n+11941 Filename Length       006D (109)\n+11943 Extra Length          0000 (0)\n+11945 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11945: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-119E4 PAYLOAD\n+119B2 PAYLOAD\n \n-11D87 LOCAL HEADER #277     04034B50 (67324752)\n-11D8B Extract Zip Spec      14 (20) '2.0'\n-11D8C Extract OS            00 (0) 'MS-DOS'\n-11D8D General Purpose Flag  0800 (2048)\n+11D55 LOCAL HEADER #277     04034B50 (67324752)\n+11D59 Extract Zip Spec      14 (20) '2.0'\n+11D5A Extract OS            00 (0) 'MS-DOS'\n+11D5B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-11D8F Compression Method    0008 (8) 'Deflated'\n-11D91 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-11D95 CRC                   8950733E (2303750974)\n-11D99 Compressed Size       00000350 (848)\n-11D9D Uncompressed Size     0000064D (1613)\n-11DA1 Filename Length       006C (108)\n-11DA3 Extra Length          0000 (0)\n-11DA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+11D5D Compression Method    0008 (8) 'Deflated'\n+11D5F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+11D63 CRC                   8950733E (2303750974)\n+11D67 Compressed Size       00000350 (848)\n+11D6B Uncompressed Size     0000064D (1613)\n+11D6F Filename Length       006C (108)\n+11D71 Extra Length          0000 (0)\n+11D73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x11DA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x11D73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-11E11 PAYLOAD\n+11DDF PAYLOAD\n \n-12161 LOCAL HEADER #278     04034B50 (67324752)\n-12165 Extract Zip Spec      14 (20) '2.0'\n-12166 Extract OS            00 (0) 'MS-DOS'\n-12167 General Purpose Flag  0800 (2048)\n+1212F LOCAL HEADER #278     04034B50 (67324752)\n+12133 Extract Zip Spec      14 (20) '2.0'\n+12134 Extract OS            00 (0) 'MS-DOS'\n+12135 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12169 Compression Method    0008 (8) 'Deflated'\n-1216B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1216F CRC                   A0157ABE (2685762238)\n-12173 Compressed Size       0000034B (843)\n-12177 Uncompressed Size     00000643 (1603)\n-1217B Filename Length       006B (107)\n-1217D Extra Length          0000 (0)\n-1217F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+12137 Compression Method    0008 (8) 'Deflated'\n+12139 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1213D CRC                   A0157ABE (2685762238)\n+12141 Compressed Size       0000034B (843)\n+12145 Uncompressed Size     00000643 (1603)\n+12149 Filename Length       006B (107)\n+1214B Extra Length          0000 (0)\n+1214D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1217F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1214D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-121EA PAYLOAD\n+121B8 PAYLOAD\n \n-12535 LOCAL HEADER #279     04034B50 (67324752)\n-12539 Extract Zip Spec      14 (20) '2.0'\n-1253A Extract OS            00 (0) 'MS-DOS'\n-1253B General Purpose Flag  0800 (2048)\n+12503 LOCAL HEADER #279     04034B50 (67324752)\n+12507 Extract Zip Spec      14 (20) '2.0'\n+12508 Extract OS            00 (0) 'MS-DOS'\n+12509 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1253D Compression Method    0008 (8) 'Deflated'\n-1253F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-12543 CRC                   164EC61D (374261277)\n-12547 Compressed Size       0000054E (1358)\n-1254B Uncompressed Size     00000B15 (2837)\n-1254F Filename Length       0091 (145)\n-12551 Extra Length          0000 (0)\n-12553 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1250B Compression Method    0008 (8) 'Deflated'\n+1250D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+12511 CRC                   164EC61D (374261277)\n+12515 Compressed Size       0000054E (1358)\n+12519 Uncompressed Size     00000B15 (2837)\n+1251D Filename Length       0091 (145)\n+1251F Extra Length          0000 (0)\n+12521 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12553: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12521: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-125E4 PAYLOAD\n+125B2 PAYLOAD\n \n-12B32 LOCAL HEADER #280     04034B50 (67324752)\n-12B36 Extract Zip Spec      14 (20) '2.0'\n-12B37 Extract OS            00 (0) 'MS-DOS'\n-12B38 General Purpose Flag  0800 (2048)\n+12B00 LOCAL HEADER #280     04034B50 (67324752)\n+12B04 Extract Zip Spec      14 (20) '2.0'\n+12B05 Extract OS            00 (0) 'MS-DOS'\n+12B06 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12B3A Compression Method    0008 (8) 'Deflated'\n-12B3C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-12B40 CRC                   4F9A1C4F (1335499855)\n-12B44 Compressed Size       000003FB (1019)\n-12B48 Uncompressed Size     000009AF (2479)\n-12B4C Filename Length       0075 (117)\n-12B4E Extra Length          0000 (0)\n-12B50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+12B08 Compression Method    0008 (8) 'Deflated'\n+12B0A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+12B0E CRC                   4F9A1C4F (1335499855)\n+12B12 Compressed Size       000003FB (1019)\n+12B16 Uncompressed Size     000009AF (2479)\n+12B1A Filename Length       0075 (117)\n+12B1C Extra Length          0000 (0)\n+12B1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12B50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12B1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-12BC5 PAYLOAD\n+12B93 PAYLOAD\n \n-12FC0 LOCAL HEADER #281     04034B50 (67324752)\n-12FC4 Extract Zip Spec      14 (20) '2.0'\n-12FC5 Extract OS            00 (0) 'MS-DOS'\n-12FC6 General Purpose Flag  0800 (2048)\n+12F8E LOCAL HEADER #281     04034B50 (67324752)\n+12F92 Extract Zip Spec      14 (20) '2.0'\n+12F93 Extract OS            00 (0) 'MS-DOS'\n+12F94 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-12FC8 Compression Method    0008 (8) 'Deflated'\n-12FCA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-12FCE CRC                   754F4527 (1968129319)\n-12FD2 Compressed Size       00000573 (1395)\n-12FD6 Uncompressed Size     00001265 (4709)\n-12FDA Filename Length       0082 (130)\n-12FDC Extra Length          0000 (0)\n-12FDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+12F96 Compression Method    0008 (8) 'Deflated'\n+12F98 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+12F9C CRC                   754F4527 (1968129319)\n+12FA0 Compressed Size       00000573 (1395)\n+12FA4 Uncompressed Size     00001265 (4709)\n+12FA8 Filename Length       0082 (130)\n+12FAA Extra Length          0000 (0)\n+12FAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x12FDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x12FAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13060 PAYLOAD\n+1302E PAYLOAD\n \n-135D3 LOCAL HEADER #282     04034B50 (67324752)\n-135D7 Extract Zip Spec      14 (20) '2.0'\n-135D8 Extract OS            00 (0) 'MS-DOS'\n-135D9 General Purpose Flag  0800 (2048)\n+135A1 LOCAL HEADER #282     04034B50 (67324752)\n+135A5 Extract Zip Spec      14 (20) '2.0'\n+135A6 Extract OS            00 (0) 'MS-DOS'\n+135A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-135DB Compression Method    0008 (8) 'Deflated'\n-135DD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-135E1 CRC                   896578EC (2305128684)\n-135E5 Compressed Size       00000746 (1862)\n-135E9 Uncompressed Size     00001327 (4903)\n-135ED Filename Length       0090 (144)\n-135EF Extra Length          0000 (0)\n-135F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+135A9 Compression Method    0008 (8) 'Deflated'\n+135AB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+135AF CRC                   896578EC (2305128684)\n+135B3 Compressed Size       00000746 (1862)\n+135B7 Uncompressed Size     00001327 (4903)\n+135BB Filename Length       0090 (144)\n+135BD Extra Length          0000 (0)\n+135BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x135F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x135BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13681 PAYLOAD\n+1364F PAYLOAD\n \n-13DC7 LOCAL HEADER #283     04034B50 (67324752)\n-13DCB Extract Zip Spec      14 (20) '2.0'\n-13DCC Extract OS            00 (0) 'MS-DOS'\n-13DCD General Purpose Flag  0800 (2048)\n+13D95 LOCAL HEADER #283     04034B50 (67324752)\n+13D99 Extract Zip Spec      14 (20) '2.0'\n+13D9A Extract OS            00 (0) 'MS-DOS'\n+13D9B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-13DCF Compression Method    0008 (8) 'Deflated'\n-13DD1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-13DD5 CRC                   64624734 (1684162356)\n-13DD9 Compressed Size       0000063D (1597)\n-13DDD Uncompressed Size     00000D24 (3364)\n-13DE1 Filename Length       0097 (151)\n-13DE3 Extra Length          0000 (0)\n-13DE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+13D9D Compression Method    0008 (8) 'Deflated'\n+13D9F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+13DA3 CRC                   64624734 (1684162356)\n+13DA7 Compressed Size       0000063D (1597)\n+13DAB Uncompressed Size     00000D24 (3364)\n+13DAF Filename Length       0097 (151)\n+13DB1 Extra Length          0000 (0)\n+13DB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x13DE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x13DB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-13E7C PAYLOAD\n+13E4A PAYLOAD\n \n-144B9 LOCAL HEADER #284     04034B50 (67324752)\n-144BD Extract Zip Spec      14 (20) '2.0'\n-144BE Extract OS            00 (0) 'MS-DOS'\n-144BF General Purpose Flag  0800 (2048)\n+14487 LOCAL HEADER #284     04034B50 (67324752)\n+1448B Extract Zip Spec      14 (20) '2.0'\n+1448C Extract OS            00 (0) 'MS-DOS'\n+1448D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-144C1 Compression Method    0008 (8) 'Deflated'\n-144C3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-144C7 CRC                   2B6EF697 (728692375)\n-144CB Compressed Size       00000444 (1092)\n-144CF Uncompressed Size     000008CD (2253)\n-144D3 Filename Length       0093 (147)\n-144D5 Extra Length          0000 (0)\n-144D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1448F Compression Method    0008 (8) 'Deflated'\n+14491 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+14495 CRC                   2B6EF697 (728692375)\n+14499 Compressed Size       00000444 (1092)\n+1449D Uncompressed Size     000008CD (2253)\n+144A1 Filename Length       0093 (147)\n+144A3 Extra Length          0000 (0)\n+144A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x144D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x144A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1456A PAYLOAD\n+14538 PAYLOAD\n \n-149AE LOCAL HEADER #285     04034B50 (67324752)\n-149B2 Extract Zip Spec      14 (20) '2.0'\n-149B3 Extract OS            00 (0) 'MS-DOS'\n-149B4 General Purpose Flag  0800 (2048)\n+1497C LOCAL HEADER #285     04034B50 (67324752)\n+14980 Extract Zip Spec      14 (20) '2.0'\n+14981 Extract OS            00 (0) 'MS-DOS'\n+14982 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-149B6 Compression Method    0008 (8) 'Deflated'\n-149B8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-149BC CRC                   DBC79151 (3687289169)\n-149C0 Compressed Size       00000874 (2164)\n-149C4 Uncompressed Size     000013B1 (5041)\n-149C8 Filename Length       0091 (145)\n-149CA Extra Length          0000 (0)\n-149CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+14984 Compression Method    0008 (8) 'Deflated'\n+14986 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1498A CRC                   DBC79151 (3687289169)\n+1498E Compressed Size       00000874 (2164)\n+14992 Uncompressed Size     000013B1 (5041)\n+14996 Filename Length       0091 (145)\n+14998 Extra Length          0000 (0)\n+1499A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x149CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1499A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-14A5D PAYLOAD\n+14A2B PAYLOAD\n \n-152D1 LOCAL HEADER #286     04034B50 (67324752)\n-152D5 Extract Zip Spec      14 (20) '2.0'\n-152D6 Extract OS            00 (0) 'MS-DOS'\n-152D7 General Purpose Flag  0800 (2048)\n+1529F LOCAL HEADER #286     04034B50 (67324752)\n+152A3 Extract Zip Spec      14 (20) '2.0'\n+152A4 Extract OS            00 (0) 'MS-DOS'\n+152A5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-152D9 Compression Method    0008 (8) 'Deflated'\n-152DB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-152DF CRC                   9AFFB21B (2600448539)\n-152E3 Compressed Size       0000033F (831)\n-152E7 Uncompressed Size     0000064E (1614)\n-152EB Filename Length       0097 (151)\n-152ED Extra Length          0000 (0)\n-152EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+152A7 Compression Method    0008 (8) 'Deflated'\n+152A9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+152AD CRC                   9AFFB21B (2600448539)\n+152B1 Compressed Size       0000033F (831)\n+152B5 Uncompressed Size     0000064E (1614)\n+152B9 Filename Length       0097 (151)\n+152BB Extra Length          0000 (0)\n+152BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x152EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x152BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15386 PAYLOAD\n+15354 PAYLOAD\n \n-156C5 LOCAL HEADER #287     04034B50 (67324752)\n-156C9 Extract Zip Spec      14 (20) '2.0'\n-156CA Extract OS            00 (0) 'MS-DOS'\n-156CB General Purpose Flag  0800 (2048)\n+15693 LOCAL HEADER #287     04034B50 (67324752)\n+15697 Extract Zip Spec      14 (20) '2.0'\n+15698 Extract OS            00 (0) 'MS-DOS'\n+15699 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-156CD Compression Method    0008 (8) 'Deflated'\n-156CF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-156D3 CRC                   88CF36AA (2295281322)\n-156D7 Compressed Size       000004BC (1212)\n-156DB Uncompressed Size     00000A4F (2639)\n-156DF Filename Length       0093 (147)\n-156E1 Extra Length          0000 (0)\n-156E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1569B Compression Method    0008 (8) 'Deflated'\n+1569D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+156A1 CRC                   88CF36AA (2295281322)\n+156A5 Compressed Size       000004BC (1212)\n+156A9 Uncompressed Size     00000A4F (2639)\n+156AD Filename Length       0093 (147)\n+156AF Extra Length          0000 (0)\n+156B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x156E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x156B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15776 PAYLOAD\n+15744 PAYLOAD\n \n-15C32 LOCAL HEADER #288     04034B50 (67324752)\n-15C36 Extract Zip Spec      14 (20) '2.0'\n-15C37 Extract OS            00 (0) 'MS-DOS'\n-15C38 General Purpose Flag  0800 (2048)\n+15C00 LOCAL HEADER #288     04034B50 (67324752)\n+15C04 Extract Zip Spec      14 (20) '2.0'\n+15C05 Extract OS            00 (0) 'MS-DOS'\n+15C06 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-15C3A Compression Method    0008 (8) 'Deflated'\n-15C3C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-15C40 CRC                   9593555C (2509460828)\n-15C44 Compressed Size       000005DA (1498)\n-15C48 Uncompressed Size     00000D05 (3333)\n-15C4C Filename Length       009C (156)\n-15C4E Extra Length          0000 (0)\n-15C50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+15C08 Compression Method    0008 (8) 'Deflated'\n+15C0A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+15C0E CRC                   9593555C (2509460828)\n+15C12 Compressed Size       000005DA (1498)\n+15C16 Uncompressed Size     00000D05 (3333)\n+15C1A Filename Length       009C (156)\n+15C1C Extra Length          0000 (0)\n+15C1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x15C50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x15C1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-15CEC PAYLOAD\n+15CBA PAYLOAD\n \n-162C6 LOCAL HEADER #289     04034B50 (67324752)\n-162CA Extract Zip Spec      14 (20) '2.0'\n-162CB Extract OS            00 (0) 'MS-DOS'\n-162CC General Purpose Flag  0800 (2048)\n+16294 LOCAL HEADER #289     04034B50 (67324752)\n+16298 Extract Zip Spec      14 (20) '2.0'\n+16299 Extract OS            00 (0) 'MS-DOS'\n+1629A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-162CE Compression Method    0008 (8) 'Deflated'\n-162D0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-162D4 CRC                   9640338D (2520789901)\n-162D8 Compressed Size       00000785 (1925)\n-162DC Uncompressed Size     000013DD (5085)\n-162E0 Filename Length       0091 (145)\n-162E2 Extra Length          0000 (0)\n-162E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1629C Compression Method    0008 (8) 'Deflated'\n+1629E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+162A2 CRC                   9640338D (2520789901)\n+162A6 Compressed Size       00000785 (1925)\n+162AA Uncompressed Size     000013DD (5085)\n+162AE Filename Length       0091 (145)\n+162B0 Extra Length          0000 (0)\n+162B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x162E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x162B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-16375 PAYLOAD\n+16343 PAYLOAD\n \n-16AFA LOCAL HEADER #290     04034B50 (67324752)\n-16AFE Extract Zip Spec      14 (20) '2.0'\n-16AFF Extract OS            00 (0) 'MS-DOS'\n-16B00 General Purpose Flag  0800 (2048)\n+16AC8 LOCAL HEADER #290     04034B50 (67324752)\n+16ACC Extract Zip Spec      14 (20) '2.0'\n+16ACD Extract OS            00 (0) 'MS-DOS'\n+16ACE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-16B02 Compression Method    0008 (8) 'Deflated'\n-16B04 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-16B08 CRC                   5232B519 (1379054873)\n-16B0C Compressed Size       000009AF (2479)\n-16B10 Uncompressed Size     00001C1F (7199)\n-16B14 Filename Length       0093 (147)\n-16B16 Extra Length          0000 (0)\n-16B18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+16AD0 Compression Method    0008 (8) 'Deflated'\n+16AD2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+16AD6 CRC                   5232B519 (1379054873)\n+16ADA Compressed Size       000009AF (2479)\n+16ADE Uncompressed Size     00001C1F (7199)\n+16AE2 Filename Length       0093 (147)\n+16AE4 Extra Length          0000 (0)\n+16AE6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x16B18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x16AE6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-16BAB PAYLOAD\n+16B79 PAYLOAD\n \n-1755A LOCAL HEADER #291     04034B50 (67324752)\n-1755E Extract Zip Spec      14 (20) '2.0'\n-1755F Extract OS            00 (0) 'MS-DOS'\n-17560 General Purpose Flag  0800 (2048)\n+17528 LOCAL HEADER #291     04034B50 (67324752)\n+1752C Extract Zip Spec      14 (20) '2.0'\n+1752D Extract OS            00 (0) 'MS-DOS'\n+1752E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17562 Compression Method    0008 (8) 'Deflated'\n-17564 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-17568 CRC                   57267C45 (1462139973)\n-1756C Compressed Size       0000083D (2109)\n-17570 Uncompressed Size     000013D6 (5078)\n-17574 Filename Length       0090 (144)\n-17576 Extra Length          0000 (0)\n-17578 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+17530 Compression Method    0008 (8) 'Deflated'\n+17532 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+17536 CRC                   57267C45 (1462139973)\n+1753A Compressed Size       0000083D (2109)\n+1753E Uncompressed Size     000013D6 (5078)\n+17542 Filename Length       0090 (144)\n+17544 Extra Length          0000 (0)\n+17546 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17578: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17546: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-17608 PAYLOAD\n+175D6 PAYLOAD\n \n-17E45 LOCAL HEADER #292     04034B50 (67324752)\n-17E49 Extract Zip Spec      14 (20) '2.0'\n-17E4A Extract OS            00 (0) 'MS-DOS'\n-17E4B General Purpose Flag  0800 (2048)\n+17E13 LOCAL HEADER #292     04034B50 (67324752)\n+17E17 Extract Zip Spec      14 (20) '2.0'\n+17E18 Extract OS            00 (0) 'MS-DOS'\n+17E19 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-17E4D Compression Method    0008 (8) 'Deflated'\n-17E4F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-17E53 CRC                   333FC2BB (859816635)\n-17E57 Compressed Size       00000395 (917)\n-17E5B Uncompressed Size     00000736 (1846)\n-17E5F Filename Length       0097 (151)\n-17E61 Extra Length          0000 (0)\n-17E63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+17E1B Compression Method    0008 (8) 'Deflated'\n+17E1D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+17E21 CRC                   333FC2BB (859816635)\n+17E25 Compressed Size       00000395 (917)\n+17E29 Uncompressed Size     00000736 (1846)\n+17E2D Filename Length       0097 (151)\n+17E2F Extra Length          0000 (0)\n+17E31 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x17E63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x17E31: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-17EFA PAYLOAD\n+17EC8 PAYLOAD\n \n-1828F LOCAL HEADER #293     04034B50 (67324752)\n-18293 Extract Zip Spec      14 (20) '2.0'\n-18294 Extract OS            00 (0) 'MS-DOS'\n-18295 General Purpose Flag  0800 (2048)\n+1825D LOCAL HEADER #293     04034B50 (67324752)\n+18261 Extract Zip Spec      14 (20) '2.0'\n+18262 Extract OS            00 (0) 'MS-DOS'\n+18263 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-18297 Compression Method    0008 (8) 'Deflated'\n-18299 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1829D CRC                   10CC5E74 (281828980)\n-182A1 Compressed Size       000004BC (1212)\n-182A5 Uncompressed Size     000009CD (2509)\n-182A9 Filename Length       0070 (112)\n-182AB Extra Length          0000 (0)\n-182AD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+18265 Compression Method    0008 (8) 'Deflated'\n+18267 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1826B CRC                   10CC5E74 (281828980)\n+1826F Compressed Size       000004BC (1212)\n+18273 Uncompressed Size     000009CD (2509)\n+18277 Filename Length       0070 (112)\n+18279 Extra Length          0000 (0)\n+1827B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x182AD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1827B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1831D PAYLOAD\n+182EB PAYLOAD\n \n-187D9 LOCAL HEADER #294     04034B50 (67324752)\n-187DD Extract Zip Spec      14 (20) '2.0'\n-187DE Extract OS            00 (0) 'MS-DOS'\n-187DF General Purpose Flag  0800 (2048)\n+187A7 LOCAL HEADER #294     04034B50 (67324752)\n+187AB Extract Zip Spec      14 (20) '2.0'\n+187AC Extract OS            00 (0) 'MS-DOS'\n+187AD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-187E1 Compression Method    0008 (8) 'Deflated'\n-187E3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-187E7 CRC                   5F6BF872 (1600911474)\n-187EB Compressed Size       000004BC (1212)\n-187EF Uncompressed Size     000009A0 (2464)\n-187F3 Filename Length       0070 (112)\n-187F5 Extra Length          0000 (0)\n-187F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+187AF Compression Method    0008 (8) 'Deflated'\n+187B1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+187B5 CRC                   5F6BF872 (1600911474)\n+187B9 Compressed Size       000004BC (1212)\n+187BD Uncompressed Size     000009A0 (2464)\n+187C1 Filename Length       0070 (112)\n+187C3 Extra Length          0000 (0)\n+187C5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x187F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x187C5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-18867 PAYLOAD\n+18835 PAYLOAD\n \n-18D23 LOCAL HEADER #295     04034B50 (67324752)\n-18D27 Extract Zip Spec      14 (20) '2.0'\n-18D28 Extract OS            00 (0) 'MS-DOS'\n-18D29 General Purpose Flag  0800 (2048)\n+18CF1 LOCAL HEADER #295     04034B50 (67324752)\n+18CF5 Extract Zip Spec      14 (20) '2.0'\n+18CF6 Extract OS            00 (0) 'MS-DOS'\n+18CF7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-18D2B Compression Method    0008 (8) 'Deflated'\n-18D2D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-18D31 CRC                   456B0BC9 (1164643273)\n-18D35 Compressed Size       000005BD (1469)\n-18D39 Uncompressed Size     00001135 (4405)\n-18D3D Filename Length       006C (108)\n-18D3F Extra Length          0000 (0)\n-18D41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+18CF9 Compression Method    0008 (8) 'Deflated'\n+18CFB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+18CFF CRC                   456B0BC9 (1164643273)\n+18D03 Compressed Size       000005BD (1469)\n+18D07 Uncompressed Size     00001135 (4405)\n+18D0B Filename Length       006C (108)\n+18D0D Extra Length          0000 (0)\n+18D0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x18D41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x18D0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-18DAD PAYLOAD\n+18D7B PAYLOAD\n \n-1936A LOCAL HEADER #296     04034B50 (67324752)\n-1936E Extract Zip Spec      14 (20) '2.0'\n-1936F Extract OS            00 (0) 'MS-DOS'\n-19370 General Purpose Flag  0800 (2048)\n+19338 LOCAL HEADER #296     04034B50 (67324752)\n+1933C Extract Zip Spec      14 (20) '2.0'\n+1933D Extract OS            00 (0) 'MS-DOS'\n+1933E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-19372 Compression Method    0008 (8) 'Deflated'\n-19374 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-19378 CRC                   E1F88A2C (3791161900)\n-1937C Compressed Size       00000457 (1111)\n-19380 Uncompressed Size     00000924 (2340)\n-19384 Filename Length       0081 (129)\n-19386 Extra Length          0000 (0)\n-19388 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+19340 Compression Method    0008 (8) 'Deflated'\n+19342 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+19346 CRC                   E1F88A2C (3791161900)\n+1934A Compressed Size       00000457 (1111)\n+1934E Uncompressed Size     00000924 (2340)\n+19352 Filename Length       0081 (129)\n+19354 Extra Length          0000 (0)\n+19356 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x19388: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x19356: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-19409 PAYLOAD\n+193D7 PAYLOAD\n \n-19860 LOCAL HEADER #297     04034B50 (67324752)\n-19864 Extract Zip Spec      14 (20) '2.0'\n-19865 Extract OS            00 (0) 'MS-DOS'\n-19866 General Purpose Flag  0800 (2048)\n+1982E LOCAL HEADER #297     04034B50 (67324752)\n+19832 Extract Zip Spec      14 (20) '2.0'\n+19833 Extract OS            00 (0) 'MS-DOS'\n+19834 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-19868 Compression Method    0008 (8) 'Deflated'\n-1986A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1986E CRC                   6A45582D (1782929453)\n-19872 Compressed Size       000004E4 (1252)\n-19876 Uncompressed Size     000009E0 (2528)\n-1987A Filename Length       0075 (117)\n-1987C Extra Length          0000 (0)\n-1987E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+19836 Compression Method    0008 (8) 'Deflated'\n+19838 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1983C CRC                   6A45582D (1782929453)\n+19840 Compressed Size       000004E4 (1252)\n+19844 Uncompressed Size     000009E0 (2528)\n+19848 Filename Length       0075 (117)\n+1984A Extra Length          0000 (0)\n+1984C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1987E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1984C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-198F3 PAYLOAD\n+198C1 PAYLOAD\n \n-19DD7 LOCAL HEADER #298     04034B50 (67324752)\n-19DDB Extract Zip Spec      14 (20) '2.0'\n-19DDC Extract OS            00 (0) 'MS-DOS'\n-19DDD General Purpose Flag  0800 (2048)\n+19DA5 LOCAL HEADER #298     04034B50 (67324752)\n+19DA9 Extract Zip Spec      14 (20) '2.0'\n+19DAA Extract OS            00 (0) 'MS-DOS'\n+19DAB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-19DDF Compression Method    0008 (8) 'Deflated'\n-19DE1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-19DE5 CRC                   4731534C (1194414924)\n-19DE9 Compressed Size       0000051E (1310)\n-19DED Uncompressed Size     00000B90 (2960)\n-19DF1 Filename Length       0077 (119)\n-19DF3 Extra Length          0000 (0)\n-19DF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+19DAD Compression Method    0008 (8) 'Deflated'\n+19DAF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+19DB3 CRC                   4731534C (1194414924)\n+19DB7 Compressed Size       0000051E (1310)\n+19DBB Uncompressed Size     00000B90 (2960)\n+19DBF Filename Length       0077 (119)\n+19DC1 Extra Length          0000 (0)\n+19DC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x19DF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x19DC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-19E6C PAYLOAD\n+19E3A PAYLOAD\n \n-1A38A LOCAL HEADER #299     04034B50 (67324752)\n-1A38E Extract Zip Spec      14 (20) '2.0'\n-1A38F Extract OS            00 (0) 'MS-DOS'\n-1A390 General Purpose Flag  0800 (2048)\n+1A358 LOCAL HEADER #299     04034B50 (67324752)\n+1A35C Extract Zip Spec      14 (20) '2.0'\n+1A35D Extract OS            00 (0) 'MS-DOS'\n+1A35E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1A392 Compression Method    0008 (8) 'Deflated'\n-1A394 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1A398 CRC                   CEBA8B64 (3468331876)\n-1A39C Compressed Size       000004A0 (1184)\n-1A3A0 Uncompressed Size     00000A7D (2685)\n-1A3A4 Filename Length       0076 (118)\n-1A3A6 Extra Length          0000 (0)\n-1A3A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1A360 Compression Method    0008 (8) 'Deflated'\n+1A362 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1A366 CRC                   CEBA8B64 (3468331876)\n+1A36A Compressed Size       000004A0 (1184)\n+1A36E Uncompressed Size     00000A7D (2685)\n+1A372 Filename Length       0076 (118)\n+1A374 Extra Length          0000 (0)\n+1A376 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1A3A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1A376: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1A41E PAYLOAD\n+1A3EC PAYLOAD\n \n-1A8BE LOCAL HEADER #300     04034B50 (67324752)\n-1A8C2 Extract Zip Spec      14 (20) '2.0'\n-1A8C3 Extract OS            00 (0) 'MS-DOS'\n-1A8C4 General Purpose Flag  0800 (2048)\n+1A88C LOCAL HEADER #300     04034B50 (67324752)\n+1A890 Extract Zip Spec      14 (20) '2.0'\n+1A891 Extract OS            00 (0) 'MS-DOS'\n+1A892 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1A8C6 Compression Method    0008 (8) 'Deflated'\n-1A8C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1A8CC CRC                   0DACEA84 (229436036)\n-1A8D0 Compressed Size       000004B1 (1201)\n-1A8D4 Uncompressed Size     00000A95 (2709)\n-1A8D8 Filename Length       0075 (117)\n-1A8DA Extra Length          0000 (0)\n-1A8DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1A894 Compression Method    0008 (8) 'Deflated'\n+1A896 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1A89A CRC                   0DACEA84 (229436036)\n+1A89E Compressed Size       000004B1 (1201)\n+1A8A2 Uncompressed Size     00000A95 (2709)\n+1A8A6 Filename Length       0075 (117)\n+1A8A8 Extra Length          0000 (0)\n+1A8AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1A8DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1A8AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1A951 PAYLOAD\n+1A91F PAYLOAD\n \n-1AE02 LOCAL HEADER #301     04034B50 (67324752)\n-1AE06 Extract Zip Spec      14 (20) '2.0'\n-1AE07 Extract OS            00 (0) 'MS-DOS'\n-1AE08 General Purpose Flag  0800 (2048)\n+1ADD0 LOCAL HEADER #301     04034B50 (67324752)\n+1ADD4 Extract Zip Spec      14 (20) '2.0'\n+1ADD5 Extract OS            00 (0) 'MS-DOS'\n+1ADD6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1AE0A Compression Method    0008 (8) 'Deflated'\n-1AE0C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1AE10 CRC                   2E84B239 (780448313)\n-1AE14 Compressed Size       000006DB (1755)\n-1AE18 Uncompressed Size     0000121D (4637)\n-1AE1C Filename Length       0076 (118)\n-1AE1E Extra Length          0000 (0)\n-1AE20 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1ADD8 Compression Method    0008 (8) 'Deflated'\n+1ADDA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1ADDE CRC                   2E84B239 (780448313)\n+1ADE2 Compressed Size       000006DB (1755)\n+1ADE6 Uncompressed Size     0000121D (4637)\n+1ADEA Filename Length       0076 (118)\n+1ADEC Extra Length          0000 (0)\n+1ADEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1AE20: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1ADEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1AE96 PAYLOAD\n+1AE64 PAYLOAD\n \n-1B571 LOCAL HEADER #302     04034B50 (67324752)\n-1B575 Extract Zip Spec      14 (20) '2.0'\n-1B576 Extract OS            00 (0) 'MS-DOS'\n-1B577 General Purpose Flag  0800 (2048)\n+1B53F LOCAL HEADER #302     04034B50 (67324752)\n+1B543 Extract Zip Spec      14 (20) '2.0'\n+1B544 Extract OS            00 (0) 'MS-DOS'\n+1B545 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B579 Compression Method    0008 (8) 'Deflated'\n-1B57B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1B57F CRC                   10E7267F (283584127)\n-1B583 Compressed Size       000003B1 (945)\n-1B587 Uncompressed Size     000006FB (1787)\n-1B58B Filename Length       0090 (144)\n-1B58D Extra Length          0000 (0)\n-1B58F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1B547 Compression Method    0008 (8) 'Deflated'\n+1B549 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1B54D CRC                   10E7267F (283584127)\n+1B551 Compressed Size       000003B1 (945)\n+1B555 Uncompressed Size     000006FB (1787)\n+1B559 Filename Length       0090 (144)\n+1B55B Extra Length          0000 (0)\n+1B55D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B58F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B55D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1B61F PAYLOAD\n+1B5ED PAYLOAD\n \n-1B9D0 LOCAL HEADER #303     04034B50 (67324752)\n-1B9D4 Extract Zip Spec      14 (20) '2.0'\n-1B9D5 Extract OS            00 (0) 'MS-DOS'\n-1B9D6 General Purpose Flag  0800 (2048)\n+1B99E LOCAL HEADER #303     04034B50 (67324752)\n+1B9A2 Extract Zip Spec      14 (20) '2.0'\n+1B9A3 Extract OS            00 (0) 'MS-DOS'\n+1B9A4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1B9D8 Compression Method    0008 (8) 'Deflated'\n-1B9DA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1B9DE CRC                   24E47A3B (618953275)\n-1B9E2 Compressed Size       000003B4 (948)\n-1B9E6 Uncompressed Size     000006FF (1791)\n-1B9EA Filename Length       0091 (145)\n-1B9EC Extra Length          0000 (0)\n-1B9EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1B9A6 Compression Method    0008 (8) 'Deflated'\n+1B9A8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1B9AC CRC                   24E47A3B (618953275)\n+1B9B0 Compressed Size       000003B4 (948)\n+1B9B4 Uncompressed Size     000006FF (1791)\n+1B9B8 Filename Length       0091 (145)\n+1B9BA Extra Length          0000 (0)\n+1B9BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1B9EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1B9BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1BA7F PAYLOAD\n+1BA4D PAYLOAD\n \n-1BE33 LOCAL HEADER #304     04034B50 (67324752)\n-1BE37 Extract Zip Spec      14 (20) '2.0'\n-1BE38 Extract OS            00 (0) 'MS-DOS'\n-1BE39 General Purpose Flag  0800 (2048)\n+1BE01 LOCAL HEADER #304     04034B50 (67324752)\n+1BE05 Extract Zip Spec      14 (20) '2.0'\n+1BE06 Extract OS            00 (0) 'MS-DOS'\n+1BE07 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1BE3B Compression Method    0008 (8) 'Deflated'\n-1BE3D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1BE41 CRC                   042BB565 (69973349)\n-1BE45 Compressed Size       000007C6 (1990)\n-1BE49 Uncompressed Size     00001364 (4964)\n-1BE4D Filename Length       008C (140)\n-1BE4F Extra Length          0000 (0)\n-1BE51 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1BE09 Compression Method    0008 (8) 'Deflated'\n+1BE0B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1BE0F CRC                   042BB565 (69973349)\n+1BE13 Compressed Size       000007C6 (1990)\n+1BE17 Uncompressed Size     00001364 (4964)\n+1BE1B Filename Length       008C (140)\n+1BE1D Extra Length          0000 (0)\n+1BE1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXX'\n #\n-# WARNING: Offset 0x1BE51: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1BE1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1BEDD PAYLOAD\n+1BEAB PAYLOAD\n \n-1C6A3 LOCAL HEADER #305     04034B50 (67324752)\n-1C6A7 Extract Zip Spec      14 (20) '2.0'\n-1C6A8 Extract OS            00 (0) 'MS-DOS'\n-1C6A9 General Purpose Flag  0800 (2048)\n+1C671 LOCAL HEADER #305     04034B50 (67324752)\n+1C675 Extract Zip Spec      14 (20) '2.0'\n+1C676 Extract OS            00 (0) 'MS-DOS'\n+1C677 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1C6AB Compression Method    0008 (8) 'Deflated'\n-1C6AD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1C6B1 CRC                   7A63232B (2053317419)\n-1C6B5 Compressed Size       0000084C (2124)\n-1C6B9 Uncompressed Size     000013C0 (5056)\n-1C6BD Filename Length       008D (141)\n-1C6BF Extra Length          0000 (0)\n-1C6C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1C679 Compression Method    0008 (8) 'Deflated'\n+1C67B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1C67F CRC                   7A63232B (2053317419)\n+1C683 Compressed Size       0000084C (2124)\n+1C687 Uncompressed Size     000013C0 (5056)\n+1C68B Filename Length       008D (141)\n+1C68D Extra Length          0000 (0)\n+1C68F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXX'\n #\n-# WARNING: Offset 0x1C6C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1C68F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1C74E PAYLOAD\n+1C71C PAYLOAD\n \n-1CF9A LOCAL HEADER #306     04034B50 (67324752)\n-1CF9E Extract Zip Spec      14 (20) '2.0'\n-1CF9F Extract OS            00 (0) 'MS-DOS'\n-1CFA0 General Purpose Flag  0800 (2048)\n+1CF68 LOCAL HEADER #306     04034B50 (67324752)\n+1CF6C Extract Zip Spec      14 (20) '2.0'\n+1CF6D Extract OS            00 (0) 'MS-DOS'\n+1CF6E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1CFA2 Compression Method    0008 (8) 'Deflated'\n-1CFA4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1CFA8 CRC                   19888393 (428376979)\n-1CFAC Compressed Size       000004B8 (1208)\n-1CFB0 Uncompressed Size     0000092E (2350)\n-1CFB4 Filename Length       0076 (118)\n-1CFB6 Extra Length          0000 (0)\n-1CFB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1CF70 Compression Method    0008 (8) 'Deflated'\n+1CF72 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1CF76 CRC                   19888393 (428376979)\n+1CF7A Compressed Size       000004B8 (1208)\n+1CF7E Uncompressed Size     0000092E (2350)\n+1CF82 Filename Length       0076 (118)\n+1CF84 Extra Length          0000 (0)\n+1CF86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1CFB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1CF86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1D02E PAYLOAD\n+1CFFC PAYLOAD\n \n-1D4E6 LOCAL HEADER #307     04034B50 (67324752)\n-1D4EA Extract Zip Spec      14 (20) '2.0'\n-1D4EB Extract OS            00 (0) 'MS-DOS'\n-1D4EC General Purpose Flag  0800 (2048)\n+1D4B4 LOCAL HEADER #307     04034B50 (67324752)\n+1D4B8 Extract Zip Spec      14 (20) '2.0'\n+1D4B9 Extract OS            00 (0) 'MS-DOS'\n+1D4BA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1D4EE Compression Method    0008 (8) 'Deflated'\n-1D4F0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1D4F4 CRC                   8B1E3BB7 (2334014391)\n-1D4F8 Compressed Size       00000B79 (2937)\n-1D4FC Uncompressed Size     00002091 (8337)\n-1D500 Filename Length       007C (124)\n-1D502 Extra Length          0000 (0)\n-1D504 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1D4BC Compression Method    0008 (8) 'Deflated'\n+1D4BE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1D4C2 CRC                   8B1E3BB7 (2334014391)\n+1D4C6 Compressed Size       00000B79 (2937)\n+1D4CA Uncompressed Size     00002091 (8337)\n+1D4CE Filename Length       007C (124)\n+1D4D0 Extra Length          0000 (0)\n+1D4D2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1D504: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1D4D2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1D580 PAYLOAD\n+1D54E PAYLOAD\n \n-1E0F9 LOCAL HEADER #308     04034B50 (67324752)\n-1E0FD Extract Zip Spec      14 (20) '2.0'\n-1E0FE Extract OS            00 (0) 'MS-DOS'\n-1E0FF General Purpose Flag  0800 (2048)\n+1E0C7 LOCAL HEADER #308     04034B50 (67324752)\n+1E0CB Extract Zip Spec      14 (20) '2.0'\n+1E0CC Extract OS            00 (0) 'MS-DOS'\n+1E0CD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1E101 Compression Method    0008 (8) 'Deflated'\n-1E103 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1E107 CRC                   0D142FFC (219426812)\n-1E10B Compressed Size       000009EA (2538)\n-1E10F Uncompressed Size     00001A7B (6779)\n-1E113 Filename Length       0091 (145)\n-1E115 Extra Length          0000 (0)\n-1E117 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1E0CF Compression Method    0008 (8) 'Deflated'\n+1E0D1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1E0D5 CRC                   0D142FFC (219426812)\n+1E0D9 Compressed Size       000009EA (2538)\n+1E0DD Uncompressed Size     00001A7B (6779)\n+1E0E1 Filename Length       0091 (145)\n+1E0E3 Extra Length          0000 (0)\n+1E0E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1E117: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1E0E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1E1A8 PAYLOAD\n+1E176 PAYLOAD\n \n-1EB92 LOCAL HEADER #309     04034B50 (67324752)\n-1EB96 Extract Zip Spec      14 (20) '2.0'\n-1EB97 Extract OS            00 (0) 'MS-DOS'\n-1EB98 General Purpose Flag  0800 (2048)\n+1EB60 LOCAL HEADER #309     04034B50 (67324752)\n+1EB64 Extract Zip Spec      14 (20) '2.0'\n+1EB65 Extract OS            00 (0) 'MS-DOS'\n+1EB66 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1EB9A Compression Method    0008 (8) 'Deflated'\n-1EB9C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1EBA0 CRC                   726CFBF2 (1919745010)\n-1EBA4 Compressed Size       00000434 (1076)\n-1EBA8 Uncompressed Size     00000886 (2182)\n-1EBAC Filename Length       0097 (151)\n-1EBAE Extra Length          0000 (0)\n-1EBB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1EB68 Compression Method    0008 (8) 'Deflated'\n+1EB6A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1EB6E CRC                   726CFBF2 (1919745010)\n+1EB72 Compressed Size       00000434 (1076)\n+1EB76 Uncompressed Size     00000886 (2182)\n+1EB7A Filename Length       0097 (151)\n+1EB7C Extra Length          0000 (0)\n+1EB7E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1EBB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1EB7E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1EC47 PAYLOAD\n+1EC15 PAYLOAD\n \n-1F07B LOCAL HEADER #310     04034B50 (67324752)\n-1F07F Extract Zip Spec      14 (20) '2.0'\n-1F080 Extract OS            00 (0) 'MS-DOS'\n-1F081 General Purpose Flag  0800 (2048)\n+1F049 LOCAL HEADER #310     04034B50 (67324752)\n+1F04D Extract Zip Spec      14 (20) '2.0'\n+1F04E Extract OS            00 (0) 'MS-DOS'\n+1F04F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1F083 Compression Method    0008 (8) 'Deflated'\n-1F085 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1F089 CRC                   0124A640 (19179072)\n-1F08D Compressed Size       0000070A (1802)\n-1F091 Uncompressed Size     00001071 (4209)\n-1F095 Filename Length       009E (158)\n-1F097 Extra Length          0000 (0)\n-1F099 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1F051 Compression Method    0008 (8) 'Deflated'\n+1F053 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1F057 CRC                   0124A640 (19179072)\n+1F05B Compressed Size       0000070A (1802)\n+1F05F Uncompressed Size     00001071 (4209)\n+1F063 Filename Length       009E (158)\n+1F065 Extra Length          0000 (0)\n+1F067 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1F099: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1F067: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1F137 PAYLOAD\n+1F105 PAYLOAD\n \n-1F841 LOCAL HEADER #311     04034B50 (67324752)\n-1F845 Extract Zip Spec      14 (20) '2.0'\n-1F846 Extract OS            00 (0) 'MS-DOS'\n-1F847 General Purpose Flag  0800 (2048)\n+1F80F LOCAL HEADER #311     04034B50 (67324752)\n+1F813 Extract Zip Spec      14 (20) '2.0'\n+1F814 Extract OS            00 (0) 'MS-DOS'\n+1F815 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1F849 Compression Method    0008 (8) 'Deflated'\n-1F84B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1F84F CRC                   7E793C9C (2121874588)\n-1F853 Compressed Size       00000459 (1113)\n-1F857 Uncompressed Size     000008CC (2252)\n-1F85B Filename Length       009E (158)\n-1F85D Extra Length          0000 (0)\n-1F85F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+1F817 Compression Method    0008 (8) 'Deflated'\n+1F819 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1F81D CRC                   7E793C9C (2121874588)\n+1F821 Compressed Size       00000459 (1113)\n+1F825 Uncompressed Size     000008CC (2252)\n+1F829 Filename Length       009E (158)\n+1F82B Extra Length          0000 (0)\n+1F82D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1F85F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1F82D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1F8FD PAYLOAD\n+1F8CB PAYLOAD\n \n-1FD56 LOCAL HEADER #312     04034B50 (67324752)\n-1FD5A Extract Zip Spec      14 (20) '2.0'\n-1FD5B Extract OS            00 (0) 'MS-DOS'\n-1FD5C General Purpose Flag  0800 (2048)\n+1FD24 LOCAL HEADER #312     04034B50 (67324752)\n+1FD28 Extract Zip Spec      14 (20) '2.0'\n+1FD29 Extract OS            00 (0) 'MS-DOS'\n+1FD2A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-1FD5E Compression Method    0008 (8) 'Deflated'\n-1FD60 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-1FD64 CRC                   4C048087 (1275363463)\n-1FD68 Compressed Size       00000445 (1093)\n-1FD6C Uncompressed Size     00000861 (2145)\n-1FD70 Filename Length       0073 (115)\n-1FD72 Extra Length          0000 (0)\n-1FD74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+1FD2C Compression Method    0008 (8) 'Deflated'\n+1FD2E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+1FD32 CRC                   4C048087 (1275363463)\n+1FD36 Compressed Size       00000445 (1093)\n+1FD3A Uncompressed Size     00000861 (2145)\n+1FD3E Filename Length       0073 (115)\n+1FD40 Extra Length          0000 (0)\n+1FD42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x1FD74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x1FD42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-1FDE7 PAYLOAD\n+1FDB5 PAYLOAD\n \n-2022C LOCAL HEADER #313     04034B50 (67324752)\n-20230 Extract Zip Spec      14 (20) '2.0'\n-20231 Extract OS            00 (0) 'MS-DOS'\n-20232 General Purpose Flag  0800 (2048)\n+201FA LOCAL HEADER #313     04034B50 (67324752)\n+201FE Extract Zip Spec      14 (20) '2.0'\n+201FF Extract OS            00 (0) 'MS-DOS'\n+20200 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-20234 Compression Method    0008 (8) 'Deflated'\n-20236 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2023A CRC                   877B2EE8 (2272997096)\n-2023E Compressed Size       00000AAF (2735)\n-20242 Uncompressed Size     0000215E (8542)\n-20246 Filename Length       0080 (128)\n-20248 Extra Length          0000 (0)\n-2024A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+20202 Compression Method    0008 (8) 'Deflated'\n+20204 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+20208 CRC                   877B2EE8 (2272997096)\n+2020C Compressed Size       00000AAF (2735)\n+20210 Uncompressed Size     0000215E (8542)\n+20214 Filename Length       0080 (128)\n+20216 Extra Length          0000 (0)\n+20218 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2024A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x20218: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-202CA PAYLOAD\n+20298 PAYLOAD\n \n-20D79 LOCAL HEADER #314     04034B50 (67324752)\n-20D7D Extract Zip Spec      14 (20) '2.0'\n-20D7E Extract OS            00 (0) 'MS-DOS'\n-20D7F General Purpose Flag  0800 (2048)\n+20D47 LOCAL HEADER #314     04034B50 (67324752)\n+20D4B Extract Zip Spec      14 (20) '2.0'\n+20D4C Extract OS            00 (0) 'MS-DOS'\n+20D4D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-20D81 Compression Method    0008 (8) 'Deflated'\n-20D83 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-20D87 CRC                   E43D22D5 (3829211861)\n-20D8B Compressed Size       00000806 (2054)\n-20D8F Uncompressed Size     0000147F (5247)\n-20D93 Filename Length       0084 (132)\n-20D95 Extra Length          0000 (0)\n-20D97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+20D4F Compression Method    0008 (8) 'Deflated'\n+20D51 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+20D55 CRC                   E43D22D5 (3829211861)\n+20D59 Compressed Size       00000806 (2054)\n+20D5D Uncompressed Size     0000147F (5247)\n+20D61 Filename Length       0084 (132)\n+20D63 Extra Length          0000 (0)\n+20D65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0x20D97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x20D65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-20E1B PAYLOAD\n+20DE9 PAYLOAD\n \n-21621 LOCAL HEADER #315     04034B50 (67324752)\n-21625 Extract Zip Spec      14 (20) '2.0'\n-21626 Extract OS            00 (0) 'MS-DOS'\n-21627 General Purpose Flag  0800 (2048)\n+215EF LOCAL HEADER #315     04034B50 (67324752)\n+215F3 Extract Zip Spec      14 (20) '2.0'\n+215F4 Extract OS            00 (0) 'MS-DOS'\n+215F5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-21629 Compression Method    0008 (8) 'Deflated'\n-2162B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2162F CRC                   D765846F (3613754479)\n-21633 Compressed Size       0000069E (1694)\n-21637 Uncompressed Size     00001060 (4192)\n-2163B Filename Length       0076 (118)\n-2163D Extra Length          0000 (0)\n-2163F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+215F7 Compression Method    0008 (8) 'Deflated'\n+215F9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+215FD CRC                   D765846F (3613754479)\n+21601 Compressed Size       0000069E (1694)\n+21605 Uncompressed Size     00001060 (4192)\n+21609 Filename Length       0076 (118)\n+2160B Extra Length          0000 (0)\n+2160D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2163F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2160D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-216B5 PAYLOAD\n+21683 PAYLOAD\n \n-21D53 LOCAL HEADER #316     04034B50 (67324752)\n-21D57 Extract Zip Spec      14 (20) '2.0'\n-21D58 Extract OS            00 (0) 'MS-DOS'\n-21D59 General Purpose Flag  0800 (2048)\n+21D21 LOCAL HEADER #316     04034B50 (67324752)\n+21D25 Extract Zip Spec      14 (20) '2.0'\n+21D26 Extract OS            00 (0) 'MS-DOS'\n+21D27 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-21D5B Compression Method    0008 (8) 'Deflated'\n-21D5D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-21D61 CRC                   57E394F3 (1474532595)\n-21D65 Compressed Size       000006F4 (1780)\n-21D69 Uncompressed Size     0000115C (4444)\n-21D6D Filename Length       0076 (118)\n-21D6F Extra Length          0000 (0)\n-21D71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+21D29 Compression Method    0008 (8) 'Deflated'\n+21D2B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+21D2F CRC                   57E394F3 (1474532595)\n+21D33 Compressed Size       000006F4 (1780)\n+21D37 Uncompressed Size     0000115C (4444)\n+21D3B Filename Length       0076 (118)\n+21D3D Extra Length          0000 (0)\n+21D3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x21D71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x21D3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-21DE7 PAYLOAD\n+21DB5 PAYLOAD\n \n-224DB LOCAL HEADER #317     04034B50 (67324752)\n-224DF Extract Zip Spec      14 (20) '2.0'\n-224E0 Extract OS            00 (0) 'MS-DOS'\n-224E1 General Purpose Flag  0800 (2048)\n+224A9 LOCAL HEADER #317     04034B50 (67324752)\n+224AD Extract Zip Spec      14 (20) '2.0'\n+224AE Extract OS            00 (0) 'MS-DOS'\n+224AF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-224E3 Compression Method    0008 (8) 'Deflated'\n-224E5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-224E9 CRC                   990AFEE4 (2567634660)\n-224ED Compressed Size       0000042B (1067)\n-224F1 Uncompressed Size     00000807 (2055)\n-224F5 Filename Length       0074 (116)\n-224F7 Extra Length          0000 (0)\n-224F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+224B1 Compression Method    0008 (8) 'Deflated'\n+224B3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+224B7 CRC                   990AFEE4 (2567634660)\n+224BB Compressed Size       0000042B (1067)\n+224BF Uncompressed Size     00000807 (2055)\n+224C3 Filename Length       0074 (116)\n+224C5 Extra Length          0000 (0)\n+224C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x224F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x224C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2256D PAYLOAD\n+2253B PAYLOAD\n \n-22998 LOCAL HEADER #318     04034B50 (67324752)\n-2299C Extract Zip Spec      14 (20) '2.0'\n-2299D Extract OS            00 (0) 'MS-DOS'\n-2299E General Purpose Flag  0800 (2048)\n+22966 LOCAL HEADER #318     04034B50 (67324752)\n+2296A Extract Zip Spec      14 (20) '2.0'\n+2296B Extract OS            00 (0) 'MS-DOS'\n+2296C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-229A0 Compression Method    0008 (8) 'Deflated'\n-229A2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-229A6 CRC                   F6367964 (4130765156)\n-229AA Compressed Size       0000164C (5708)\n-229AE Uncompressed Size     00005103 (20739)\n-229B2 Filename Length       0086 (134)\n-229B4 Extra Length          0000 (0)\n-229B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+2296E Compression Method    0008 (8) 'Deflated'\n+22970 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+22974 CRC                   F6367964 (4130765156)\n+22978 Compressed Size       0000164C (5708)\n+2297C Uncompressed Size     00005103 (20739)\n+22980 Filename Length       0086 (134)\n+22982 Extra Length          0000 (0)\n+22984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0x229B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x22984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-22A3C PAYLOAD\n+22A0A PAYLOAD\n \n-24088 LOCAL HEADER #319     04034B50 (67324752)\n-2408C Extract Zip Spec      14 (20) '2.0'\n-2408D Extract OS            00 (0) 'MS-DOS'\n-2408E General Purpose Flag  0800 (2048)\n+24056 LOCAL HEADER #319     04034B50 (67324752)\n+2405A Extract Zip Spec      14 (20) '2.0'\n+2405B Extract OS            00 (0) 'MS-DOS'\n+2405C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-24090 Compression Method    0008 (8) 'Deflated'\n-24092 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-24096 CRC                   9EC902FD (2663973629)\n-2409A Compressed Size       000010B5 (4277)\n-2409E Uncompressed Size     00003DB9 (15801)\n-240A2 Filename Length       0080 (128)\n-240A4 Extra Length          0000 (0)\n-240A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2405E Compression Method    0008 (8) 'Deflated'\n+24060 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+24064 CRC                   9EC902FD (2663973629)\n+24068 Compressed Size       000010B5 (4277)\n+2406C Uncompressed Size     00003DB9 (15801)\n+24070 Filename Length       0080 (128)\n+24072 Extra Length          0000 (0)\n+24074 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x240A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x24074: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-24126 PAYLOAD\n+240F4 PAYLOAD\n \n-251DB LOCAL HEADER #320     04034B50 (67324752)\n-251DF Extract Zip Spec      14 (20) '2.0'\n-251E0 Extract OS            00 (0) 'MS-DOS'\n-251E1 General Purpose Flag  0800 (2048)\n+251A9 LOCAL HEADER #320     04034B50 (67324752)\n+251AD Extract Zip Spec      14 (20) '2.0'\n+251AE Extract OS            00 (0) 'MS-DOS'\n+251AF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-251E3 Compression Method    0008 (8) 'Deflated'\n-251E5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-251E9 CRC                   AD150348 (2903835464)\n-251ED Compressed Size       0000189A (6298)\n-251F1 Uncompressed Size     00009C3D (39997)\n-251F5 Filename Length       0086 (134)\n-251F7 Extra Length          0000 (0)\n-251F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+251B1 Compression Method    0008 (8) 'Deflated'\n+251B3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+251B7 CRC                   AD150348 (2903835464)\n+251BB Compressed Size       0000189A (6298)\n+251BF Uncompressed Size     00009C3D (39997)\n+251C3 Filename Length       0086 (134)\n+251C5 Extra Length          0000 (0)\n+251C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0x251F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x251C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2527F PAYLOAD\n+2524D PAYLOAD\n \n-26B19 LOCAL HEADER #321     04034B50 (67324752)\n-26B1D Extract Zip Spec      14 (20) '2.0'\n-26B1E Extract OS            00 (0) 'MS-DOS'\n-26B1F General Purpose Flag  0800 (2048)\n+26AE7 LOCAL HEADER #321     04034B50 (67324752)\n+26AEB Extract Zip Spec      14 (20) '2.0'\n+26AEC Extract OS            00 (0) 'MS-DOS'\n+26AED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-26B21 Compression Method    0008 (8) 'Deflated'\n-26B23 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-26B27 CRC                   8BF94713 (2348369683)\n-26B2B Compressed Size       00000C16 (3094)\n-26B2F Uncompressed Size     00002C4C (11340)\n-26B33 Filename Length       0080 (128)\n-26B35 Extra Length          0000 (0)\n-26B37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+26AEF Compression Method    0008 (8) 'Deflated'\n+26AF1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+26AF5 CRC                   8BF94713 (2348369683)\n+26AF9 Compressed Size       00000C16 (3094)\n+26AFD Uncompressed Size     00002C4C (11340)\n+26B01 Filename Length       0080 (128)\n+26B03 Extra Length          0000 (0)\n+26B05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x26B37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x26B05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-26BB7 PAYLOAD\n+26B85 PAYLOAD\n \n-277CD LOCAL HEADER #322     04034B50 (67324752)\n-277D1 Extract Zip Spec      14 (20) '2.0'\n-277D2 Extract OS            00 (0) 'MS-DOS'\n-277D3 General Purpose Flag  0800 (2048)\n+2779B LOCAL HEADER #322     04034B50 (67324752)\n+2779F Extract Zip Spec      14 (20) '2.0'\n+277A0 Extract OS            00 (0) 'MS-DOS'\n+277A1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-277D5 Compression Method    0008 (8) 'Deflated'\n-277D7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-277DB CRC                   42E654D4 (1122391252)\n-277DF Compressed Size       00000650 (1616)\n-277E3 Uncompressed Size     00000EFA (3834)\n-277E7 Filename Length       0076 (118)\n-277E9 Extra Length          0000 (0)\n-277EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+277A3 Compression Method    0008 (8) 'Deflated'\n+277A5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+277A9 CRC                   42E654D4 (1122391252)\n+277AD Compressed Size       00000650 (1616)\n+277B1 Uncompressed Size     00000EFA (3834)\n+277B5 Filename Length       0076 (118)\n+277B7 Extra Length          0000 (0)\n+277B9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x277EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x277B9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-27861 PAYLOAD\n+2782F PAYLOAD\n \n-27EB1 LOCAL HEADER #323     04034B50 (67324752)\n-27EB5 Extract Zip Spec      14 (20) '2.0'\n-27EB6 Extract OS            00 (0) 'MS-DOS'\n-27EB7 General Purpose Flag  0800 (2048)\n+27E7F LOCAL HEADER #323     04034B50 (67324752)\n+27E83 Extract Zip Spec      14 (20) '2.0'\n+27E84 Extract OS            00 (0) 'MS-DOS'\n+27E85 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-27EB9 Compression Method    0008 (8) 'Deflated'\n-27EBB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-27EBF CRC                   51B4F745 (1370814277)\n-27EC3 Compressed Size       0000075A (1882)\n-27EC7 Uncompressed Size     000016D7 (5847)\n-27ECB Filename Length       007C (124)\n-27ECD Extra Length          0000 (0)\n-27ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+27E87 Compression Method    0008 (8) 'Deflated'\n+27E89 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+27E8D CRC                   51B4F745 (1370814277)\n+27E91 Compressed Size       0000075A (1882)\n+27E95 Uncompressed Size     000016D7 (5847)\n+27E99 Filename Length       007C (124)\n+27E9B Extra Length          0000 (0)\n+27E9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x27ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x27E9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-27F4B PAYLOAD\n+27F19 PAYLOAD\n \n-286A5 LOCAL HEADER #324     04034B50 (67324752)\n-286A9 Extract Zip Spec      14 (20) '2.0'\n-286AA Extract OS            00 (0) 'MS-DOS'\n-286AB General Purpose Flag  0800 (2048)\n+28673 LOCAL HEADER #324     04034B50 (67324752)\n+28677 Extract Zip Spec      14 (20) '2.0'\n+28678 Extract OS            00 (0) 'MS-DOS'\n+28679 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-286AD Compression Method    0008 (8) 'Deflated'\n-286AF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-286B3 CRC                   357DA477 (897426551)\n-286B7 Compressed Size       0000039F (927)\n-286BB Uncompressed Size     000006C6 (1734)\n-286BF Filename Length       0074 (116)\n-286C1 Extra Length          0000 (0)\n-286C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2867B Compression Method    0008 (8) 'Deflated'\n+2867D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+28681 CRC                   357DA477 (897426551)\n+28685 Compressed Size       0000039F (927)\n+28689 Uncompressed Size     000006C6 (1734)\n+2868D Filename Length       0074 (116)\n+2868F Extra Length          0000 (0)\n+28691 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x286C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x28691: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-28737 PAYLOAD\n+28705 PAYLOAD\n \n-28AD6 LOCAL HEADER #325     04034B50 (67324752)\n-28ADA Extract Zip Spec      14 (20) '2.0'\n-28ADB Extract OS            00 (0) 'MS-DOS'\n-28ADC General Purpose Flag  0800 (2048)\n+28AA4 LOCAL HEADER #325     04034B50 (67324752)\n+28AA8 Extract Zip Spec      14 (20) '2.0'\n+28AA9 Extract OS            00 (0) 'MS-DOS'\n+28AAA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-28ADE Compression Method    0008 (8) 'Deflated'\n-28AE0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-28AE4 CRC                   F9CAC97B (4190816635)\n-28AE8 Compressed Size       000004CB (1227)\n-28AEC Uncompressed Size     000009BC (2492)\n-28AF0 Filename Length       0071 (113)\n-28AF2 Extra Length          0000 (0)\n-28AF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+28AAC Compression Method    0008 (8) 'Deflated'\n+28AAE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+28AB2 CRC                   F9CAC97B (4190816635)\n+28AB6 Compressed Size       000004CB (1227)\n+28ABA Uncompressed Size     000009BC (2492)\n+28ABE Filename Length       0071 (113)\n+28AC0 Extra Length          0000 (0)\n+28AC2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x28AF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x28AC2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-28B65 PAYLOAD\n+28B33 PAYLOAD\n \n-29030 LOCAL HEADER #326     04034B50 (67324752)\n-29034 Extract Zip Spec      14 (20) '2.0'\n-29035 Extract OS            00 (0) 'MS-DOS'\n-29036 General Purpose Flag  0800 (2048)\n+28FFE LOCAL HEADER #326     04034B50 (67324752)\n+29002 Extract Zip Spec      14 (20) '2.0'\n+29003 Extract OS            00 (0) 'MS-DOS'\n+29004 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-29038 Compression Method    0008 (8) 'Deflated'\n-2903A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2903E CRC                   9DEB8C8B (2649459851)\n-29042 Compressed Size       000004E7 (1255)\n-29046 Uncompressed Size     00000A07 (2567)\n-2904A Filename Length       0077 (119)\n-2904C Extra Length          0000 (0)\n-2904E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29006 Compression Method    0008 (8) 'Deflated'\n+29008 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2900C CRC                   9DEB8C8B (2649459851)\n+29010 Compressed Size       000004E7 (1255)\n+29014 Uncompressed Size     00000A07 (2567)\n+29018 Filename Length       0077 (119)\n+2901A Extra Length          0000 (0)\n+2901C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2904E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2901C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-290C5 PAYLOAD\n+29093 PAYLOAD\n \n-295AC LOCAL HEADER #327     04034B50 (67324752)\n-295B0 Extract Zip Spec      14 (20) '2.0'\n-295B1 Extract OS            00 (0) 'MS-DOS'\n-295B2 General Purpose Flag  0800 (2048)\n+2957A LOCAL HEADER #327     04034B50 (67324752)\n+2957E Extract Zip Spec      14 (20) '2.0'\n+2957F Extract OS            00 (0) 'MS-DOS'\n+29580 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-295B4 Compression Method    0008 (8) 'Deflated'\n-295B6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-295BA CRC                   85B17459 (2242999385)\n-295BE Compressed Size       0000060E (1550)\n-295C2 Uncompressed Size     00000DDE (3550)\n-295C6 Filename Length       0071 (113)\n-295C8 Extra Length          0000 (0)\n-295CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29582 Compression Method    0008 (8) 'Deflated'\n+29584 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+29588 CRC                   85B17459 (2242999385)\n+2958C Compressed Size       0000060E (1550)\n+29590 Uncompressed Size     00000DDE (3550)\n+29594 Filename Length       0071 (113)\n+29596 Extra Length          0000 (0)\n+29598 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x295CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29598: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2963B PAYLOAD\n+29609 PAYLOAD\n \n-29C49 LOCAL HEADER #328     04034B50 (67324752)\n-29C4D Extract Zip Spec      14 (20) '2.0'\n-29C4E Extract OS            00 (0) 'MS-DOS'\n-29C4F General Purpose Flag  0800 (2048)\n+29C17 LOCAL HEADER #328     04034B50 (67324752)\n+29C1B Extract Zip Spec      14 (20) '2.0'\n+29C1C Extract OS            00 (0) 'MS-DOS'\n+29C1D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-29C51 Compression Method    0008 (8) 'Deflated'\n-29C53 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-29C57 CRC                   9C229073 (2619510899)\n-29C5B Compressed Size       00000330 (816)\n-29C5F Uncompressed Size     000005CF (1487)\n-29C63 Filename Length       007C (124)\n-29C65 Extra Length          0000 (0)\n-29C67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29C1F Compression Method    0008 (8) 'Deflated'\n+29C21 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+29C25 CRC                   9C229073 (2619510899)\n+29C29 Compressed Size       00000330 (816)\n+29C2D Uncompressed Size     000005CF (1487)\n+29C31 Filename Length       007C (124)\n+29C33 Extra Length          0000 (0)\n+29C35 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x29C67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29C35: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-29CE3 PAYLOAD\n+29CB1 PAYLOAD\n \n-2A013 LOCAL HEADER #329     04034B50 (67324752)\n-2A017 Extract Zip Spec      14 (20) '2.0'\n-2A018 Extract OS            00 (0) 'MS-DOS'\n-2A019 General Purpose Flag  0800 (2048)\n+29FE1 LOCAL HEADER #329     04034B50 (67324752)\n+29FE5 Extract Zip Spec      14 (20) '2.0'\n+29FE6 Extract OS            00 (0) 'MS-DOS'\n+29FE7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2A01B Compression Method    0008 (8) 'Deflated'\n-2A01D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2A021 CRC                   A57691CD (2776011213)\n-2A025 Compressed Size       00000316 (790)\n-2A029 Uncompressed Size     000005C2 (1474)\n-2A02D Filename Length       007C (124)\n-2A02F Extra Length          0000 (0)\n-2A031 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+29FE9 Compression Method    0008 (8) 'Deflated'\n+29FEB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+29FEF CRC                   A57691CD (2776011213)\n+29FF3 Compressed Size       00000316 (790)\n+29FF7 Uncompressed Size     000005C2 (1474)\n+29FFB Filename Length       007C (124)\n+29FFD Extra Length          0000 (0)\n+29FFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2A031: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x29FFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2A0AD PAYLOAD\n+2A07B PAYLOAD\n \n-2A3C3 LOCAL HEADER #330     04034B50 (67324752)\n-2A3C7 Extract Zip Spec      14 (20) '2.0'\n-2A3C8 Extract OS            00 (0) 'MS-DOS'\n-2A3C9 General Purpose Flag  0800 (2048)\n+2A391 LOCAL HEADER #330     04034B50 (67324752)\n+2A395 Extract Zip Spec      14 (20) '2.0'\n+2A396 Extract OS            00 (0) 'MS-DOS'\n+2A397 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2A3CB Compression Method    0008 (8) 'Deflated'\n-2A3CD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2A3D1 CRC                   6CD31445 (1825772613)\n-2A3D5 Compressed Size       000003CA (970)\n-2A3D9 Uncompressed Size     0000073A (1850)\n-2A3DD Filename Length       007B (123)\n-2A3DF Extra Length          0000 (0)\n-2A3E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2A399 Compression Method    0008 (8) 'Deflated'\n+2A39B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2A39F CRC                   6CD31445 (1825772613)\n+2A3A3 Compressed Size       000003CA (970)\n+2A3A7 Uncompressed Size     0000073A (1850)\n+2A3AB Filename Length       007B (123)\n+2A3AD Extra Length          0000 (0)\n+2A3AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2A3E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2A3AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2A45C PAYLOAD\n+2A42A PAYLOAD\n \n-2A826 LOCAL HEADER #331     04034B50 (67324752)\n-2A82A Extract Zip Spec      14 (20) '2.0'\n-2A82B Extract OS            00 (0) 'MS-DOS'\n-2A82C General Purpose Flag  0800 (2048)\n+2A7F4 LOCAL HEADER #331     04034B50 (67324752)\n+2A7F8 Extract Zip Spec      14 (20) '2.0'\n+2A7F9 Extract OS            00 (0) 'MS-DOS'\n+2A7FA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2A82E Compression Method    0008 (8) 'Deflated'\n-2A830 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2A834 CRC                   C97DF8D6 (3380476118)\n-2A838 Compressed Size       00000522 (1314)\n-2A83C Uncompressed Size     00000A92 (2706)\n-2A840 Filename Length       0079 (121)\n-2A842 Extra Length          0000 (0)\n-2A844 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2A7FC Compression Method    0008 (8) 'Deflated'\n+2A7FE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2A802 CRC                   C97DF8D6 (3380476118)\n+2A806 Compressed Size       00000522 (1314)\n+2A80A Uncompressed Size     00000A92 (2706)\n+2A80E Filename Length       0079 (121)\n+2A810 Extra Length          0000 (0)\n+2A812 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2A844: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2A812: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2A8BD PAYLOAD\n+2A88B PAYLOAD\n \n-2ADDF LOCAL HEADER #332     04034B50 (67324752)\n-2ADE3 Extract Zip Spec      14 (20) '2.0'\n-2ADE4 Extract OS            00 (0) 'MS-DOS'\n-2ADE5 General Purpose Flag  0800 (2048)\n+2ADAD LOCAL HEADER #332     04034B50 (67324752)\n+2ADB1 Extract Zip Spec      14 (20) '2.0'\n+2ADB2 Extract OS            00 (0) 'MS-DOS'\n+2ADB3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2ADE7 Compression Method    0008 (8) 'Deflated'\n-2ADE9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2ADED CRC                   0B04A112 (184852754)\n-2ADF1 Compressed Size       000003C7 (967)\n-2ADF5 Uncompressed Size     00000795 (1941)\n-2ADF9 Filename Length       006E (110)\n-2ADFB Extra Length          0000 (0)\n-2ADFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2ADB5 Compression Method    0008 (8) 'Deflated'\n+2ADB7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2ADBB CRC                   0B04A112 (184852754)\n+2ADBF Compressed Size       000003C7 (967)\n+2ADC3 Uncompressed Size     00000795 (1941)\n+2ADC7 Filename Length       006E (110)\n+2ADC9 Extra Length          0000 (0)\n+2ADCB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2ADFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2ADCB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2AE6B PAYLOAD\n+2AE39 PAYLOAD\n \n-2B232 LOCAL HEADER #333     04034B50 (67324752)\n-2B236 Extract Zip Spec      14 (20) '2.0'\n-2B237 Extract OS            00 (0) 'MS-DOS'\n-2B238 General Purpose Flag  0800 (2048)\n+2B200 LOCAL HEADER #333     04034B50 (67324752)\n+2B204 Extract Zip Spec      14 (20) '2.0'\n+2B205 Extract OS            00 (0) 'MS-DOS'\n+2B206 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B23A Compression Method    0008 (8) 'Deflated'\n-2B23C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2B240 CRC                   9A51A289 (2589041289)\n-2B244 Compressed Size       00000425 (1061)\n-2B248 Uncompressed Size     000008AB (2219)\n-2B24C Filename Length       0082 (130)\n-2B24E Extra Length          0000 (0)\n-2B250 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B208 Compression Method    0008 (8) 'Deflated'\n+2B20A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2B20E CRC                   9A51A289 (2589041289)\n+2B212 Compressed Size       00000425 (1061)\n+2B216 Uncompressed Size     000008AB (2219)\n+2B21A Filename Length       0082 (130)\n+2B21C Extra Length          0000 (0)\n+2B21E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B250: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B21E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2B2D2 PAYLOAD\n+2B2A0 PAYLOAD\n \n-2B6F7 LOCAL HEADER #334     04034B50 (67324752)\n-2B6FB Extract Zip Spec      14 (20) '2.0'\n-2B6FC Extract OS            00 (0) 'MS-DOS'\n-2B6FD General Purpose Flag  0800 (2048)\n+2B6C5 LOCAL HEADER #334     04034B50 (67324752)\n+2B6C9 Extract Zip Spec      14 (20) '2.0'\n+2B6CA Extract OS            00 (0) 'MS-DOS'\n+2B6CB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2B6FF Compression Method    0008 (8) 'Deflated'\n-2B701 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2B705 CRC                   BEAE3D9C (3199090076)\n-2B709 Compressed Size       0000127D (4733)\n-2B70D Uncompressed Size     0000396F (14703)\n-2B711 Filename Length       0063 (99)\n-2B713 Extra Length          0000 (0)\n-2B715 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2B6CD Compression Method    0008 (8) 'Deflated'\n+2B6CF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2B6D3 CRC                   BEAE3D9C (3199090076)\n+2B6D7 Compressed Size       0000127D (4733)\n+2B6DB Uncompressed Size     0000396F (14703)\n+2B6DF Filename Length       0063 (99)\n+2B6E1 Extra Length          0000 (0)\n+2B6E3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2B715: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2B6E3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2B778 PAYLOAD\n+2B746 PAYLOAD\n \n-2C9F5 LOCAL HEADER #335     04034B50 (67324752)\n-2C9F9 Extract Zip Spec      14 (20) '2.0'\n-2C9FA Extract OS            00 (0) 'MS-DOS'\n-2C9FB General Purpose Flag  0800 (2048)\n+2C9C3 LOCAL HEADER #335     04034B50 (67324752)\n+2C9C7 Extract Zip Spec      14 (20) '2.0'\n+2C9C8 Extract OS            00 (0) 'MS-DOS'\n+2C9C9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2C9FD Compression Method    0008 (8) 'Deflated'\n-2C9FF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2CA03 CRC                   29D620BA (701898938)\n-2CA07 Compressed Size       00000BC2 (3010)\n-2CA0B Uncompressed Size     00002421 (9249)\n-2CA0F Filename Length       0080 (128)\n-2CA11 Extra Length          0000 (0)\n-2CA13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2C9CB Compression Method    0008 (8) 'Deflated'\n+2C9CD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2C9D1 CRC                   29D620BA (701898938)\n+2C9D5 Compressed Size       00000BC2 (3010)\n+2C9D9 Uncompressed Size     00002421 (9249)\n+2C9DD Filename Length       0080 (128)\n+2C9DF Extra Length          0000 (0)\n+2C9E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2CA13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2C9E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2CA93 PAYLOAD\n+2CA61 PAYLOAD\n \n-2D655 LOCAL HEADER #336     04034B50 (67324752)\n-2D659 Extract Zip Spec      14 (20) '2.0'\n-2D65A Extract OS            00 (0) 'MS-DOS'\n-2D65B General Purpose Flag  0800 (2048)\n+2D623 LOCAL HEADER #336     04034B50 (67324752)\n+2D627 Extract Zip Spec      14 (20) '2.0'\n+2D628 Extract OS            00 (0) 'MS-DOS'\n+2D629 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2D65D Compression Method    0008 (8) 'Deflated'\n-2D65F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2D663 CRC                   9ED7BE90 (2664939152)\n-2D667 Compressed Size       00001217 (4631)\n-2D66B Uncompressed Size     000036E7 (14055)\n-2D66F Filename Length       0079 (121)\n-2D671 Extra Length          0000 (0)\n-2D673 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2D62B Compression Method    0008 (8) 'Deflated'\n+2D62D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2D631 CRC                   9ED7BE90 (2664939152)\n+2D635 Compressed Size       00001217 (4631)\n+2D639 Uncompressed Size     000036E7 (14055)\n+2D63D Filename Length       0079 (121)\n+2D63F Extra Length          0000 (0)\n+2D641 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2D673: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2D641: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2D6EC PAYLOAD\n+2D6BA PAYLOAD\n \n-2E903 LOCAL HEADER #337     04034B50 (67324752)\n-2E907 Extract Zip Spec      14 (20) '2.0'\n-2E908 Extract OS            00 (0) 'MS-DOS'\n-2E909 General Purpose Flag  0800 (2048)\n+2E8D1 LOCAL HEADER #337     04034B50 (67324752)\n+2E8D5 Extract Zip Spec      14 (20) '2.0'\n+2E8D6 Extract OS            00 (0) 'MS-DOS'\n+2E8D7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2E90B Compression Method    0008 (8) 'Deflated'\n-2E90D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2E911 CRC                   B51FDD91 (3038764433)\n-2E915 Compressed Size       0000156C (5484)\n-2E919 Uncompressed Size     00004792 (18322)\n-2E91D Filename Length       0079 (121)\n-2E91F Extra Length          0000 (0)\n-2E921 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2E8D9 Compression Method    0008 (8) 'Deflated'\n+2E8DB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2E8DF CRC                   B51FDD91 (3038764433)\n+2E8E3 Compressed Size       0000156C (5484)\n+2E8E7 Uncompressed Size     00004792 (18322)\n+2E8EB Filename Length       0079 (121)\n+2E8ED Extra Length          0000 (0)\n+2E8EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2E921: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2E8EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2E99A PAYLOAD\n+2E968 PAYLOAD\n \n-2FF06 LOCAL HEADER #338     04034B50 (67324752)\n-2FF0A Extract Zip Spec      14 (20) '2.0'\n-2FF0B Extract OS            00 (0) 'MS-DOS'\n-2FF0C General Purpose Flag  0800 (2048)\n+2FED4 LOCAL HEADER #338     04034B50 (67324752)\n+2FED8 Extract Zip Spec      14 (20) '2.0'\n+2FED9 Extract OS            00 (0) 'MS-DOS'\n+2FEDA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-2FF0E Compression Method    0008 (8) 'Deflated'\n-2FF10 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-2FF14 CRC                   27CFA48B (667919499)\n-2FF18 Compressed Size       000018CC (6348)\n-2FF1C Uncompressed Size     00005DDC (24028)\n-2FF20 Filename Length       007B (123)\n-2FF22 Extra Length          0000 (0)\n-2FF24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+2FEDC Compression Method    0008 (8) 'Deflated'\n+2FEDE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+2FEE2 CRC                   27CFA48B (667919499)\n+2FEE6 Compressed Size       000018CC (6348)\n+2FEEA Uncompressed Size     00005DDC (24028)\n+2FEEE Filename Length       007B (123)\n+2FEF0 Extra Length          0000 (0)\n+2FEF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x2FF24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x2FEF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-2FF9F PAYLOAD\n+2FF6D PAYLOAD\n \n-3186B LOCAL HEADER #339     04034B50 (67324752)\n-3186F Extract Zip Spec      14 (20) '2.0'\n-31870 Extract OS            00 (0) 'MS-DOS'\n-31871 General Purpose Flag  0800 (2048)\n+31839 LOCAL HEADER #339     04034B50 (67324752)\n+3183D Extract Zip Spec      14 (20) '2.0'\n+3183E Extract OS            00 (0) 'MS-DOS'\n+3183F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-31873 Compression Method    0008 (8) 'Deflated'\n-31875 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-31879 CRC                   620AB78F (1644869519)\n-3187D Compressed Size       000012CF (4815)\n-31881 Uncompressed Size     00003B3A (15162)\n-31885 Filename Length       007F (127)\n-31887 Extra Length          0000 (0)\n-31889 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+31841 Compression Method    0008 (8) 'Deflated'\n+31843 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+31847 CRC                   620AB78F (1644869519)\n+3184B Compressed Size       000012CF (4815)\n+3184F Uncompressed Size     00003B3A (15162)\n+31853 Filename Length       007F (127)\n+31855 Extra Length          0000 (0)\n+31857 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x31889: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x31857: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-31908 PAYLOAD\n+318D6 PAYLOAD\n \n-32BD7 LOCAL HEADER #340     04034B50 (67324752)\n-32BDB Extract Zip Spec      14 (20) '2.0'\n-32BDC Extract OS            00 (0) 'MS-DOS'\n-32BDD General Purpose Flag  0800 (2048)\n+32BA5 LOCAL HEADER #340     04034B50 (67324752)\n+32BA9 Extract Zip Spec      14 (20) '2.0'\n+32BAA Extract OS            00 (0) 'MS-DOS'\n+32BAB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-32BDF Compression Method    0008 (8) 'Deflated'\n-32BE1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-32BE5 CRC                   937A07E6 (2474248166)\n-32BE9 Compressed Size       000013A9 (5033)\n-32BED Uncompressed Size     00004869 (18537)\n-32BF1 Filename Length       007F (127)\n-32BF3 Extra Length          0000 (0)\n-32BF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+32BAD Compression Method    0008 (8) 'Deflated'\n+32BAF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+32BB3 CRC                   937A07E6 (2474248166)\n+32BB7 Compressed Size       000013A9 (5033)\n+32BBB Uncompressed Size     00004869 (18537)\n+32BBF Filename Length       007F (127)\n+32BC1 Extra Length          0000 (0)\n+32BC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x32BF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x32BC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-32C74 PAYLOAD\n+32C42 PAYLOAD\n \n-3401D LOCAL HEADER #341     04034B50 (67324752)\n-34021 Extract Zip Spec      14 (20) '2.0'\n-34022 Extract OS            00 (0) 'MS-DOS'\n-34023 General Purpose Flag  0800 (2048)\n+33FEB LOCAL HEADER #341     04034B50 (67324752)\n+33FEF Extract Zip Spec      14 (20) '2.0'\n+33FF0 Extract OS            00 (0) 'MS-DOS'\n+33FF1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-34025 Compression Method    0008 (8) 'Deflated'\n-34027 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3402B CRC                   53DFF1D7 (1407185367)\n-3402F Compressed Size       00000442 (1090)\n-34033 Uncompressed Size     00000ADF (2783)\n-34037 Filename Length       0083 (131)\n-34039 Extra Length          0000 (0)\n-3403B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+33FF3 Compression Method    0008 (8) 'Deflated'\n+33FF5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+33FF9 CRC                   53DFF1D7 (1407185367)\n+33FFD Compressed Size       00000442 (1090)\n+34001 Uncompressed Size     00000ADF (2783)\n+34005 Filename Length       0083 (131)\n+34007 Extra Length          0000 (0)\n+34009 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3403B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x34009: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-340BE PAYLOAD\n+3408C PAYLOAD\n \n-34500 LOCAL HEADER #342     04034B50 (67324752)\n-34504 Extract Zip Spec      14 (20) '2.0'\n-34505 Extract OS            00 (0) 'MS-DOS'\n-34506 General Purpose Flag  0800 (2048)\n+344CE LOCAL HEADER #342     04034B50 (67324752)\n+344D2 Extract Zip Spec      14 (20) '2.0'\n+344D3 Extract OS            00 (0) 'MS-DOS'\n+344D4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-34508 Compression Method    0008 (8) 'Deflated'\n-3450A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3450E CRC                   6D3A5445 (1832539205)\n-34512 Compressed Size       000003FF (1023)\n-34516 Uncompressed Size     00000939 (2361)\n-3451A Filename Length       007F (127)\n-3451C Extra Length          0000 (0)\n-3451E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+344D6 Compression Method    0008 (8) 'Deflated'\n+344D8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+344DC CRC                   6D3A5445 (1832539205)\n+344E0 Compressed Size       000003FF (1023)\n+344E4 Uncompressed Size     00000939 (2361)\n+344E8 Filename Length       007F (127)\n+344EA Extra Length          0000 (0)\n+344EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3451E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x344EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3459D PAYLOAD\n+3456B PAYLOAD\n \n-3499C LOCAL HEADER #343     04034B50 (67324752)\n-349A0 Extract Zip Spec      14 (20) '2.0'\n-349A1 Extract OS            00 (0) 'MS-DOS'\n-349A2 General Purpose Flag  0800 (2048)\n+3496A LOCAL HEADER #343     04034B50 (67324752)\n+3496E Extract Zip Spec      14 (20) '2.0'\n+3496F Extract OS            00 (0) 'MS-DOS'\n+34970 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-349A4 Compression Method    0008 (8) 'Deflated'\n-349A6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-349AA CRC                   5C6B1924 (1550522660)\n-349AE Compressed Size       000005D8 (1496)\n-349B2 Uncompressed Size     00000DDD (3549)\n-349B6 Filename Length       008E (142)\n-349B8 Extra Length          0000 (0)\n-349BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+34972 Compression Method    0008 (8) 'Deflated'\n+34974 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+34978 CRC                   5C6B1924 (1550522660)\n+3497C Compressed Size       000005D8 (1496)\n+34980 Uncompressed Size     00000DDD (3549)\n+34984 Filename Length       008E (142)\n+34986 Extra Length          0000 (0)\n+34988 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXX'\n #\n-# WARNING: Offset 0x349BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x34988: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-34A48 PAYLOAD\n+34A16 PAYLOAD\n \n-35020 LOCAL HEADER #344     04034B50 (67324752)\n-35024 Extract Zip Spec      14 (20) '2.0'\n-35025 Extract OS            00 (0) 'MS-DOS'\n-35026 General Purpose Flag  0800 (2048)\n+34FEE LOCAL HEADER #344     04034B50 (67324752)\n+34FF2 Extract Zip Spec      14 (20) '2.0'\n+34FF3 Extract OS            00 (0) 'MS-DOS'\n+34FF4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-35028 Compression Method    0008 (8) 'Deflated'\n-3502A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3502E CRC                   C7DF88BB (3353315515)\n-35032 Compressed Size       00001C38 (7224)\n-35036 Uncompressed Size     00009335 (37685)\n-3503A Filename Length       0079 (121)\n-3503C Extra Length          0000 (0)\n-3503E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+34FF6 Compression Method    0008 (8) 'Deflated'\n+34FF8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+34FFC CRC                   C7DF88BB (3353315515)\n+35000 Compressed Size       00001C38 (7224)\n+35004 Uncompressed Size     00009335 (37685)\n+35008 Filename Length       0079 (121)\n+3500A Extra Length          0000 (0)\n+3500C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3503E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3500C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-350B7 PAYLOAD\n+35085 PAYLOAD\n \n-36CEF LOCAL HEADER #345     04034B50 (67324752)\n-36CF3 Extract Zip Spec      14 (20) '2.0'\n-36CF4 Extract OS            00 (0) 'MS-DOS'\n-36CF5 General Purpose Flag  0800 (2048)\n+36CBD LOCAL HEADER #345     04034B50 (67324752)\n+36CC1 Extract Zip Spec      14 (20) '2.0'\n+36CC2 Extract OS            00 (0) 'MS-DOS'\n+36CC3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-36CF7 Compression Method    0008 (8) 'Deflated'\n-36CF9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-36CFD CRC                   217BBE0B (561757707)\n-36D01 Compressed Size       00000651 (1617)\n-36D05 Uncompressed Size     00001BB1 (7089)\n-36D09 Filename Length       0082 (130)\n-36D0B Extra Length          0000 (0)\n-36D0D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+36CC5 Compression Method    0008 (8) 'Deflated'\n+36CC7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+36CCB CRC                   217BBE0B (561757707)\n+36CCF Compressed Size       00000651 (1617)\n+36CD3 Uncompressed Size     00001BB1 (7089)\n+36CD7 Filename Length       0082 (130)\n+36CD9 Extra Length          0000 (0)\n+36CDB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x36D0D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x36CDB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-36D8F PAYLOAD\n+36D5D PAYLOAD\n \n-373E0 LOCAL HEADER #346     04034B50 (67324752)\n-373E4 Extract Zip Spec      14 (20) '2.0'\n-373E5 Extract OS            00 (0) 'MS-DOS'\n-373E6 General Purpose Flag  0800 (2048)\n+373AE LOCAL HEADER #346     04034B50 (67324752)\n+373B2 Extract Zip Spec      14 (20) '2.0'\n+373B3 Extract OS            00 (0) 'MS-DOS'\n+373B4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-373E8 Compression Method    0008 (8) 'Deflated'\n-373EA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-373EE CRC                   CF72F6D0 (3480418000)\n-373F2 Compressed Size       00001400 (5120)\n-373F6 Uncompressed Size     00004A6A (19050)\n-373FA Filename Length       007F (127)\n-373FC Extra Length          0000 (0)\n-373FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+373B6 Compression Method    0008 (8) 'Deflated'\n+373B8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+373BC CRC                   CF72F6D0 (3480418000)\n+373C0 Compressed Size       00001400 (5120)\n+373C4 Uncompressed Size     00004A6A (19050)\n+373C8 Filename Length       007F (127)\n+373CA Extra Length          0000 (0)\n+373CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x373FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x373CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3747D PAYLOAD\n+3744B PAYLOAD\n \n-3887D LOCAL HEADER #347     04034B50 (67324752)\n-38881 Extract Zip Spec      14 (20) '2.0'\n-38882 Extract OS            00 (0) 'MS-DOS'\n-38883 General Purpose Flag  0800 (2048)\n+3884B LOCAL HEADER #347     04034B50 (67324752)\n+3884F Extract Zip Spec      14 (20) '2.0'\n+38850 Extract OS            00 (0) 'MS-DOS'\n+38851 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-38885 Compression Method    0008 (8) 'Deflated'\n-38887 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3888B CRC                   DCEFA272 (3706692210)\n-3888F Compressed Size       0000049C (1180)\n-38893 Uncompressed Size     000009D3 (2515)\n-38897 Filename Length       0082 (130)\n-38899 Extra Length          0000 (0)\n-3889B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+38853 Compression Method    0008 (8) 'Deflated'\n+38855 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+38859 CRC                   DCEFA272 (3706692210)\n+3885D Compressed Size       0000049C (1180)\n+38861 Uncompressed Size     000009D3 (2515)\n+38865 Filename Length       0082 (130)\n+38867 Extra Length          0000 (0)\n+38869 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3889B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38869: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3891D PAYLOAD\n+388EB PAYLOAD\n \n-38DB9 LOCAL HEADER #348     04034B50 (67324752)\n-38DBD Extract Zip Spec      14 (20) '2.0'\n-38DBE Extract OS            00 (0) 'MS-DOS'\n-38DBF General Purpose Flag  0800 (2048)\n+38D87 LOCAL HEADER #348     04034B50 (67324752)\n+38D8B Extract Zip Spec      14 (20) '2.0'\n+38D8C Extract OS            00 (0) 'MS-DOS'\n+38D8D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-38DC1 Compression Method    0008 (8) 'Deflated'\n-38DC3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-38DC7 CRC                   26E963FE (652829694)\n-38DCB Compressed Size       0000080C (2060)\n-38DCF Uncompressed Size     00001276 (4726)\n-38DD3 Filename Length       0084 (132)\n-38DD5 Extra Length          0000 (0)\n-38DD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+38D8F Compression Method    0008 (8) 'Deflated'\n+38D91 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+38D95 CRC                   26E963FE (652829694)\n+38D99 Compressed Size       0000080C (2060)\n+38D9D Uncompressed Size     00001276 (4726)\n+38DA1 Filename Length       0084 (132)\n+38DA3 Extra Length          0000 (0)\n+38DA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0x38DD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x38DA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-38E5B PAYLOAD\n+38E29 PAYLOAD\n \n-39667 LOCAL HEADER #349     04034B50 (67324752)\n-3966B Extract Zip Spec      14 (20) '2.0'\n-3966C Extract OS            00 (0) 'MS-DOS'\n-3966D General Purpose Flag  0800 (2048)\n+39635 LOCAL HEADER #349     04034B50 (67324752)\n+39639 Extract Zip Spec      14 (20) '2.0'\n+3963A Extract OS            00 (0) 'MS-DOS'\n+3963B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3966F Compression Method    0008 (8) 'Deflated'\n-39671 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-39675 CRC                   9B32EF54 (2603806548)\n-39679 Compressed Size       0000175B (5979)\n-3967D Uncompressed Size     000054C4 (21700)\n-39681 Filename Length       0077 (119)\n-39683 Extra Length          0000 (0)\n-39685 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3963D Compression Method    0008 (8) 'Deflated'\n+3963F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+39643 CRC                   9B32EF54 (2603806548)\n+39647 Compressed Size       0000175B (5979)\n+3964B Uncompressed Size     000054C4 (21700)\n+3964F Filename Length       0077 (119)\n+39651 Extra Length          0000 (0)\n+39653 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x39685: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x39653: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-396FC PAYLOAD\n+396CA PAYLOAD\n \n-3AE57 LOCAL HEADER #350     04034B50 (67324752)\n-3AE5B Extract Zip Spec      14 (20) '2.0'\n-3AE5C Extract OS            00 (0) 'MS-DOS'\n-3AE5D General Purpose Flag  0800 (2048)\n+3AE25 LOCAL HEADER #350     04034B50 (67324752)\n+3AE29 Extract Zip Spec      14 (20) '2.0'\n+3AE2A Extract OS            00 (0) 'MS-DOS'\n+3AE2B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3AE5F Compression Method    0008 (8) 'Deflated'\n-3AE61 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3AE65 CRC                   4975042F (1232405551)\n-3AE69 Compressed Size       000009BF (2495)\n-3AE6D Uncompressed Size     00001B21 (6945)\n-3AE71 Filename Length       007E (126)\n-3AE73 Extra Length          0000 (0)\n-3AE75 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3AE2D Compression Method    0008 (8) 'Deflated'\n+3AE2F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3AE33 CRC                   4975042F (1232405551)\n+3AE37 Compressed Size       000009BF (2495)\n+3AE3B Uncompressed Size     00001B21 (6945)\n+3AE3F Filename Length       007E (126)\n+3AE41 Extra Length          0000 (0)\n+3AE43 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3AE75: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3AE43: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3AEF3 PAYLOAD\n+3AEC1 PAYLOAD\n \n-3B8B2 LOCAL HEADER #351     04034B50 (67324752)\n-3B8B6 Extract Zip Spec      14 (20) '2.0'\n-3B8B7 Extract OS            00 (0) 'MS-DOS'\n-3B8B8 General Purpose Flag  0800 (2048)\n+3B880 LOCAL HEADER #351     04034B50 (67324752)\n+3B884 Extract Zip Spec      14 (20) '2.0'\n+3B885 Extract OS            00 (0) 'MS-DOS'\n+3B886 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3B8BA Compression Method    0008 (8) 'Deflated'\n-3B8BC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3B8C0 CRC                   27E12F4C (669069132)\n-3B8C4 Compressed Size       0000086D (2157)\n-3B8C8 Uncompressed Size     000014EA (5354)\n-3B8CC Filename Length       0081 (129)\n-3B8CE Extra Length          0000 (0)\n-3B8D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3B888 Compression Method    0008 (8) 'Deflated'\n+3B88A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3B88E CRC                   27E12F4C (669069132)\n+3B892 Compressed Size       0000086D (2157)\n+3B896 Uncompressed Size     000014EA (5354)\n+3B89A Filename Length       0081 (129)\n+3B89C Extra Length          0000 (0)\n+3B89E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3B8D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3B89E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3B951 PAYLOAD\n+3B91F PAYLOAD\n \n-3C1BE LOCAL HEADER #352     04034B50 (67324752)\n-3C1C2 Extract Zip Spec      14 (20) '2.0'\n-3C1C3 Extract OS            00 (0) 'MS-DOS'\n-3C1C4 General Purpose Flag  0800 (2048)\n+3C18C LOCAL HEADER #352     04034B50 (67324752)\n+3C190 Extract Zip Spec      14 (20) '2.0'\n+3C191 Extract OS            00 (0) 'MS-DOS'\n+3C192 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3C1C6 Compression Method    0008 (8) 'Deflated'\n-3C1C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3C1CC CRC                   3E8950DE (1049186526)\n-3C1D0 Compressed Size       0000120A (4618)\n-3C1D4 Uncompressed Size     000036E0 (14048)\n-3C1D8 Filename Length       0081 (129)\n-3C1DA Extra Length          0000 (0)\n-3C1DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3C194 Compression Method    0008 (8) 'Deflated'\n+3C196 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3C19A CRC                   3E8950DE (1049186526)\n+3C19E Compressed Size       0000120A (4618)\n+3C1A2 Uncompressed Size     000036E0 (14048)\n+3C1A6 Filename Length       0081 (129)\n+3C1A8 Extra Length          0000 (0)\n+3C1AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3C1DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3C1AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3C25D PAYLOAD\n+3C22B PAYLOAD\n \n-3D467 LOCAL HEADER #353     04034B50 (67324752)\n-3D46B Extract Zip Spec      14 (20) '2.0'\n-3D46C Extract OS            00 (0) 'MS-DOS'\n-3D46D General Purpose Flag  0800 (2048)\n+3D435 LOCAL HEADER #353     04034B50 (67324752)\n+3D439 Extract Zip Spec      14 (20) '2.0'\n+3D43A Extract OS            00 (0) 'MS-DOS'\n+3D43B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3D46F Compression Method    0008 (8) 'Deflated'\n-3D471 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3D475 CRC                   A9B3A4D7 (2847122647)\n-3D479 Compressed Size       00000A9A (2714)\n-3D47D Uncompressed Size     00002051 (8273)\n-3D481 Filename Length       0080 (128)\n-3D483 Extra Length          0000 (0)\n-3D485 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3D43D Compression Method    0008 (8) 'Deflated'\n+3D43F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3D443 CRC                   A9B3A4D7 (2847122647)\n+3D447 Compressed Size       00000A9A (2714)\n+3D44B Uncompressed Size     00002051 (8273)\n+3D44F Filename Length       0080 (128)\n+3D451 Extra Length          0000 (0)\n+3D453 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3D485: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3D453: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3D505 PAYLOAD\n+3D4D3 PAYLOAD\n \n-3DF9F LOCAL HEADER #354     04034B50 (67324752)\n-3DFA3 Extract Zip Spec      14 (20) '2.0'\n-3DFA4 Extract OS            00 (0) 'MS-DOS'\n-3DFA5 General Purpose Flag  0800 (2048)\n+3DF6D LOCAL HEADER #354     04034B50 (67324752)\n+3DF71 Extract Zip Spec      14 (20) '2.0'\n+3DF72 Extract OS            00 (0) 'MS-DOS'\n+3DF73 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3DFA7 Compression Method    0008 (8) 'Deflated'\n-3DFA9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3DFAD CRC                   B12610E6 (2972061926)\n-3DFB1 Compressed Size       00000441 (1089)\n-3DFB5 Uncompressed Size     00000A5B (2651)\n-3DFB9 Filename Length       0073 (115)\n-3DFBB Extra Length          0000 (0)\n-3DFBD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3DF75 Compression Method    0008 (8) 'Deflated'\n+3DF77 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3DF7B CRC                   B12610E6 (2972061926)\n+3DF7F Compressed Size       00000441 (1089)\n+3DF83 Uncompressed Size     00000A5B (2651)\n+3DF87 Filename Length       0073 (115)\n+3DF89 Extra Length          0000 (0)\n+3DF8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3DFBD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3DF8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3E030 PAYLOAD\n+3DFFE PAYLOAD\n \n-3E471 LOCAL HEADER #355     04034B50 (67324752)\n-3E475 Extract Zip Spec      14 (20) '2.0'\n-3E476 Extract OS            00 (0) 'MS-DOS'\n-3E477 General Purpose Flag  0800 (2048)\n+3E43F LOCAL HEADER #355     04034B50 (67324752)\n+3E443 Extract Zip Spec      14 (20) '2.0'\n+3E444 Extract OS            00 (0) 'MS-DOS'\n+3E445 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3E479 Compression Method    0008 (8) 'Deflated'\n-3E47B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3E47F CRC                   041CE92B (69003563)\n-3E483 Compressed Size       0000046E (1134)\n-3E487 Uncompressed Size     00000B22 (2850)\n-3E48B Filename Length       008E (142)\n-3E48D Extra Length          0000 (0)\n-3E48F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+3E447 Compression Method    0008 (8) 'Deflated'\n+3E449 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3E44D CRC                   041CE92B (69003563)\n+3E451 Compressed Size       0000046E (1134)\n+3E455 Uncompressed Size     00000B22 (2850)\n+3E459 Filename Length       008E (142)\n+3E45B Extra Length          0000 (0)\n+3E45D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXX'\n #\n-# WARNING: Offset 0x3E48F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3E45D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3E51D PAYLOAD\n+3E4EB PAYLOAD\n \n-3E98B LOCAL HEADER #356     04034B50 (67324752)\n-3E98F Extract Zip Spec      14 (20) '2.0'\n-3E990 Extract OS            00 (0) 'MS-DOS'\n-3E991 General Purpose Flag  0800 (2048)\n+3E959 LOCAL HEADER #356     04034B50 (67324752)\n+3E95D Extract Zip Spec      14 (20) '2.0'\n+3E95E Extract OS            00 (0) 'MS-DOS'\n+3E95F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3E993 Compression Method    0008 (8) 'Deflated'\n-3E995 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3E999 CRC                   16A4BA93 (379894419)\n-3E99D Compressed Size       000006D2 (1746)\n-3E9A1 Uncompressed Size     000016E4 (5860)\n-3E9A5 Filename Length       008D (141)\n-3E9A7 Extra Length          0000 (0)\n-3E9A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+3E961 Compression Method    0008 (8) 'Deflated'\n+3E963 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3E967 CRC                   16A4BA93 (379894419)\n+3E96B Compressed Size       000006D2 (1746)\n+3E96F Uncompressed Size     000016E4 (5860)\n+3E973 Filename Length       008D (141)\n+3E975 Extra Length          0000 (0)\n+3E977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXX'\n #\n-# WARNING: Offset 0x3E9A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3E977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3EA36 PAYLOAD\n+3EA04 PAYLOAD\n \n-3F108 LOCAL HEADER #357     04034B50 (67324752)\n-3F10C Extract Zip Spec      14 (20) '2.0'\n-3F10D Extract OS            00 (0) 'MS-DOS'\n-3F10E General Purpose Flag  0800 (2048)\n+3F0D6 LOCAL HEADER #357     04034B50 (67324752)\n+3F0DA Extract Zip Spec      14 (20) '2.0'\n+3F0DB Extract OS            00 (0) 'MS-DOS'\n+3F0DC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3F110 Compression Method    0008 (8) 'Deflated'\n-3F112 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3F116 CRC                   390AB403 (957002755)\n-3F11A Compressed Size       000005D3 (1491)\n-3F11E Uncompressed Size     00001068 (4200)\n-3F122 Filename Length       0090 (144)\n-3F124 Extra Length          0000 (0)\n-3F126 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+3F0DE Compression Method    0008 (8) 'Deflated'\n+3F0E0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3F0E4 CRC                   390AB403 (957002755)\n+3F0E8 Compressed Size       000005D3 (1491)\n+3F0EC Uncompressed Size     00001068 (4200)\n+3F0F0 Filename Length       0090 (144)\n+3F0F2 Extra Length          0000 (0)\n+3F0F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3F126: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3F0F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3F1B6 PAYLOAD\n+3F184 PAYLOAD\n \n-3F789 LOCAL HEADER #358     04034B50 (67324752)\n-3F78D Extract Zip Spec      14 (20) '2.0'\n-3F78E Extract OS            00 (0) 'MS-DOS'\n-3F78F General Purpose Flag  0800 (2048)\n+3F757 LOCAL HEADER #358     04034B50 (67324752)\n+3F75B Extract Zip Spec      14 (20) '2.0'\n+3F75C Extract OS            00 (0) 'MS-DOS'\n+3F75D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3F791 Compression Method    0008 (8) 'Deflated'\n-3F793 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3F797 CRC                   3DE98548 (1038714184)\n-3F79B Compressed Size       0000064F (1615)\n-3F79F Uncompressed Size     000016AA (5802)\n-3F7A3 Filename Length       008C (140)\n-3F7A5 Extra Length          0000 (0)\n-3F7A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+3F75F Compression Method    0008 (8) 'Deflated'\n+3F761 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3F765 CRC                   3DE98548 (1038714184)\n+3F769 Compressed Size       0000064F (1615)\n+3F76D Uncompressed Size     000016AA (5802)\n+3F771 Filename Length       008C (140)\n+3F773 Extra Length          0000 (0)\n+3F775 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXX'\n #\n-# WARNING: Offset 0x3F7A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3F775: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3F833 PAYLOAD\n+3F801 PAYLOAD\n \n-3FE82 LOCAL HEADER #359     04034B50 (67324752)\n-3FE86 Extract Zip Spec      14 (20) '2.0'\n-3FE87 Extract OS            00 (0) 'MS-DOS'\n-3FE88 General Purpose Flag  0800 (2048)\n+3FE50 LOCAL HEADER #359     04034B50 (67324752)\n+3FE54 Extract Zip Spec      14 (20) '2.0'\n+3FE55 Extract OS            00 (0) 'MS-DOS'\n+3FE56 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-3FE8A Compression Method    0008 (8) 'Deflated'\n-3FE8C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-3FE90 CRC                   561A3BB2 (1444559794)\n-3FE94 Compressed Size       000009BA (2490)\n-3FE98 Uncompressed Size     000018A8 (6312)\n-3FE9C Filename Length       0071 (113)\n-3FE9E Extra Length          0000 (0)\n-3FEA0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+3FE58 Compression Method    0008 (8) 'Deflated'\n+3FE5A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+3FE5E CRC                   561A3BB2 (1444559794)\n+3FE62 Compressed Size       000009BA (2490)\n+3FE66 Uncompressed Size     000018A8 (6312)\n+3FE6A Filename Length       0071 (113)\n+3FE6C Extra Length          0000 (0)\n+3FE6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x3FEA0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x3FE6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-3FF11 PAYLOAD\n+3FEDF PAYLOAD\n \n-408CB LOCAL HEADER #360     04034B50 (67324752)\n-408CF Extract Zip Spec      14 (20) '2.0'\n-408D0 Extract OS            00 (0) 'MS-DOS'\n-408D1 General Purpose Flag  0800 (2048)\n+40899 LOCAL HEADER #360     04034B50 (67324752)\n+4089D Extract Zip Spec      14 (20) '2.0'\n+4089E Extract OS            00 (0) 'MS-DOS'\n+4089F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-408D3 Compression Method    0008 (8) 'Deflated'\n-408D5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-408D9 CRC                   A1D18B9C (2714864540)\n-408DD Compressed Size       00000A70 (2672)\n-408E1 Uncompressed Size     00001AC2 (6850)\n-408E5 Filename Length       0070 (112)\n-408E7 Extra Length          0000 (0)\n-408E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+408A1 Compression Method    0008 (8) 'Deflated'\n+408A3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+408A7 CRC                   A1D18B9C (2714864540)\n+408AB Compressed Size       00000A70 (2672)\n+408AF Uncompressed Size     00001AC2 (6850)\n+408B3 Filename Length       0070 (112)\n+408B5 Extra Length          0000 (0)\n+408B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x408E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x408B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-40959 PAYLOAD\n+40927 PAYLOAD\n \n-413C9 LOCAL HEADER #361     04034B50 (67324752)\n-413CD Extract Zip Spec      14 (20) '2.0'\n-413CE Extract OS            00 (0) 'MS-DOS'\n-413CF General Purpose Flag  0800 (2048)\n+41397 LOCAL HEADER #361     04034B50 (67324752)\n+4139B Extract Zip Spec      14 (20) '2.0'\n+4139C Extract OS            00 (0) 'MS-DOS'\n+4139D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-413D1 Compression Method    0008 (8) 'Deflated'\n-413D3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-413D7 CRC                   33231FD5 (857939925)\n-413DB Compressed Size       0000082D (2093)\n-413DF Uncompressed Size     00001399 (5017)\n-413E3 Filename Length       0071 (113)\n-413E5 Extra Length          0000 (0)\n-413E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4139F Compression Method    0008 (8) 'Deflated'\n+413A1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+413A5 CRC                   33231FD5 (857939925)\n+413A9 Compressed Size       0000082D (2093)\n+413AD Uncompressed Size     00001399 (5017)\n+413B1 Filename Length       0071 (113)\n+413B3 Extra Length          0000 (0)\n+413B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x413E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x413B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-41458 PAYLOAD\n+41426 PAYLOAD\n \n-41C85 LOCAL HEADER #362     04034B50 (67324752)\n-41C89 Extract Zip Spec      14 (20) '2.0'\n-41C8A Extract OS            00 (0) 'MS-DOS'\n-41C8B General Purpose Flag  0800 (2048)\n+41C53 LOCAL HEADER #362     04034B50 (67324752)\n+41C57 Extract Zip Spec      14 (20) '2.0'\n+41C58 Extract OS            00 (0) 'MS-DOS'\n+41C59 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-41C8D Compression Method    0008 (8) 'Deflated'\n-41C8F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-41C93 CRC                   63C353AF (1673745327)\n-41C97 Compressed Size       000005DA (1498)\n-41C9B Uncompressed Size     00000CF8 (3320)\n-41C9F Filename Length       006A (106)\n-41CA1 Extra Length          0000 (0)\n-41CA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+41C5B Compression Method    0008 (8) 'Deflated'\n+41C5D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+41C61 CRC                   63C353AF (1673745327)\n+41C65 Compressed Size       000005DA (1498)\n+41C69 Uncompressed Size     00000CF8 (3320)\n+41C6D Filename Length       006A (106)\n+41C6F Extra Length          0000 (0)\n+41C71 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x41CA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x41C71: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-41D0D PAYLOAD\n+41CDB PAYLOAD\n \n-422E7 LOCAL HEADER #363     04034B50 (67324752)\n-422EB Extract Zip Spec      14 (20) '2.0'\n-422EC Extract OS            00 (0) 'MS-DOS'\n-422ED General Purpose Flag  0800 (2048)\n+422B5 LOCAL HEADER #363     04034B50 (67324752)\n+422B9 Extract Zip Spec      14 (20) '2.0'\n+422BA Extract OS            00 (0) 'MS-DOS'\n+422BB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-422EF Compression Method    0008 (8) 'Deflated'\n-422F1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-422F5 CRC                   C64481A5 (3326378405)\n-422F9 Compressed Size       000003AA (938)\n-422FD Uncompressed Size     00000723 (1827)\n-42301 Filename Length       0071 (113)\n-42303 Extra Length          0000 (0)\n-42305 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+422BD Compression Method    0008 (8) 'Deflated'\n+422BF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+422C3 CRC                   C64481A5 (3326378405)\n+422C7 Compressed Size       000003AA (938)\n+422CB Uncompressed Size     00000723 (1827)\n+422CF Filename Length       0071 (113)\n+422D1 Extra Length          0000 (0)\n+422D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x42305: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x422D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-42376 PAYLOAD\n+42344 PAYLOAD\n \n-42720 LOCAL HEADER #364     04034B50 (67324752)\n-42724 Extract Zip Spec      14 (20) '2.0'\n-42725 Extract OS            00 (0) 'MS-DOS'\n-42726 General Purpose Flag  0800 (2048)\n+426EE LOCAL HEADER #364     04034B50 (67324752)\n+426F2 Extract Zip Spec      14 (20) '2.0'\n+426F3 Extract OS            00 (0) 'MS-DOS'\n+426F4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-42728 Compression Method    0008 (8) 'Deflated'\n-4272A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4272E CRC                   39649106 (962892038)\n-42732 Compressed Size       0000039E (926)\n-42736 Uncompressed Size     000006E2 (1762)\n-4273A Filename Length       006F (111)\n-4273C Extra Length          0000 (0)\n-4273E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+426F6 Compression Method    0008 (8) 'Deflated'\n+426F8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+426FC CRC                   39649106 (962892038)\n+42700 Compressed Size       0000039E (926)\n+42704 Uncompressed Size     000006E2 (1762)\n+42708 Filename Length       006F (111)\n+4270A Extra Length          0000 (0)\n+4270C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4273E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4270C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-427AD PAYLOAD\n+4277B PAYLOAD\n \n-42B4B LOCAL HEADER #365     04034B50 (67324752)\n-42B4F Extract Zip Spec      14 (20) '2.0'\n-42B50 Extract OS            00 (0) 'MS-DOS'\n-42B51 General Purpose Flag  0800 (2048)\n+42B19 LOCAL HEADER #365     04034B50 (67324752)\n+42B1D Extract Zip Spec      14 (20) '2.0'\n+42B1E Extract OS            00 (0) 'MS-DOS'\n+42B1F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-42B53 Compression Method    0008 (8) 'Deflated'\n-42B55 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-42B59 CRC                   8DC8B44C (2378740812)\n-42B5D Compressed Size       000003E3 (995)\n-42B61 Uncompressed Size     00000782 (1922)\n-42B65 Filename Length       006A (106)\n-42B67 Extra Length          0000 (0)\n-42B69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+42B21 Compression Method    0008 (8) 'Deflated'\n+42B23 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+42B27 CRC                   8DC8B44C (2378740812)\n+42B2B Compressed Size       000003E3 (995)\n+42B2F Uncompressed Size     00000782 (1922)\n+42B33 Filename Length       006A (106)\n+42B35 Extra Length          0000 (0)\n+42B37 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x42B69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x42B37: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-42BD3 PAYLOAD\n+42BA1 PAYLOAD\n \n-42FB6 LOCAL HEADER #366     04034B50 (67324752)\n-42FBA Extract Zip Spec      14 (20) '2.0'\n-42FBB Extract OS            00 (0) 'MS-DOS'\n-42FBC General Purpose Flag  0800 (2048)\n+42F84 LOCAL HEADER #366     04034B50 (67324752)\n+42F88 Extract Zip Spec      14 (20) '2.0'\n+42F89 Extract OS            00 (0) 'MS-DOS'\n+42F8A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-42FBE Compression Method    0008 (8) 'Deflated'\n-42FC0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-42FC4 CRC                   335CA1CD (861708749)\n-42FC8 Compressed Size       0000068B (1675)\n-42FCC Uncompressed Size     00000E9A (3738)\n-42FD0 Filename Length       0074 (116)\n-42FD2 Extra Length          0000 (0)\n-42FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+42F8C Compression Method    0008 (8) 'Deflated'\n+42F8E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+42F92 CRC                   335CA1CD (861708749)\n+42F96 Compressed Size       0000068B (1675)\n+42F9A Uncompressed Size     00000E9A (3738)\n+42F9E Filename Length       0074 (116)\n+42FA0 Extra Length          0000 (0)\n+42FA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x42FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x42FA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-43048 PAYLOAD\n+43016 PAYLOAD\n \n-436D3 LOCAL HEADER #367     04034B50 (67324752)\n-436D7 Extract Zip Spec      14 (20) '2.0'\n-436D8 Extract OS            00 (0) 'MS-DOS'\n-436D9 General Purpose Flag  0800 (2048)\n+436A1 LOCAL HEADER #367     04034B50 (67324752)\n+436A5 Extract Zip Spec      14 (20) '2.0'\n+436A6 Extract OS            00 (0) 'MS-DOS'\n+436A7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-436DB Compression Method    0008 (8) 'Deflated'\n-436DD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-436E1 CRC                   3EE7FDDD (1055391197)\n-436E5 Compressed Size       00000723 (1827)\n-436E9 Uncompressed Size     00001059 (4185)\n-436ED Filename Length       0080 (128)\n-436EF Extra Length          0000 (0)\n-436F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+436A9 Compression Method    0008 (8) 'Deflated'\n+436AB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+436AF CRC                   3EE7FDDD (1055391197)\n+436B3 Compressed Size       00000723 (1827)\n+436B7 Uncompressed Size     00001059 (4185)\n+436BB Filename Length       0080 (128)\n+436BD Extra Length          0000 (0)\n+436BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x436F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x436BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-43771 PAYLOAD\n+4373F PAYLOAD\n \n-43E94 LOCAL HEADER #368     04034B50 (67324752)\n-43E98 Extract Zip Spec      14 (20) '2.0'\n-43E99 Extract OS            00 (0) 'MS-DOS'\n-43E9A General Purpose Flag  0800 (2048)\n+43E62 LOCAL HEADER #368     04034B50 (67324752)\n+43E66 Extract Zip Spec      14 (20) '2.0'\n+43E67 Extract OS            00 (0) 'MS-DOS'\n+43E68 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-43E9C Compression Method    0008 (8) 'Deflated'\n-43E9E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-43EA2 CRC                   67FA3A91 (1744452241)\n-43EA6 Compressed Size       000004A5 (1189)\n-43EAA Uncompressed Size     00000C5B (3163)\n-43EAE Filename Length       007F (127)\n-43EB0 Extra Length          0000 (0)\n-43EB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+43E6A Compression Method    0008 (8) 'Deflated'\n+43E6C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+43E70 CRC                   67FA3A91 (1744452241)\n+43E74 Compressed Size       000004A5 (1189)\n+43E78 Uncompressed Size     00000C5B (3163)\n+43E7C Filename Length       007F (127)\n+43E7E Extra Length          0000 (0)\n+43E80 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x43EB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x43E80: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-43F31 PAYLOAD\n+43EFF PAYLOAD\n \n-443D6 LOCAL HEADER #369     04034B50 (67324752)\n-443DA Extract Zip Spec      14 (20) '2.0'\n-443DB Extract OS            00 (0) 'MS-DOS'\n-443DC General Purpose Flag  0800 (2048)\n+443A4 LOCAL HEADER #369     04034B50 (67324752)\n+443A8 Extract Zip Spec      14 (20) '2.0'\n+443A9 Extract OS            00 (0) 'MS-DOS'\n+443AA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-443DE Compression Method    0008 (8) 'Deflated'\n-443E0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-443E4 CRC                   984F1B9C (2555321244)\n-443E8 Compressed Size       0000083C (2108)\n-443EC Uncompressed Size     00001AA4 (6820)\n-443F0 Filename Length       007A (122)\n-443F2 Extra Length          0000 (0)\n-443F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+443AC Compression Method    0008 (8) 'Deflated'\n+443AE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+443B2 CRC                   984F1B9C (2555321244)\n+443B6 Compressed Size       0000083C (2108)\n+443BA Uncompressed Size     00001AA4 (6820)\n+443BE Filename Length       007A (122)\n+443C0 Extra Length          0000 (0)\n+443C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x443F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x443C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4446E PAYLOAD\n+4443C PAYLOAD\n \n-44CAA LOCAL HEADER #370     04034B50 (67324752)\n-44CAE Extract Zip Spec      14 (20) '2.0'\n-44CAF Extract OS            00 (0) 'MS-DOS'\n-44CB0 General Purpose Flag  0800 (2048)\n+44C78 LOCAL HEADER #370     04034B50 (67324752)\n+44C7C Extract Zip Spec      14 (20) '2.0'\n+44C7D Extract OS            00 (0) 'MS-DOS'\n+44C7E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-44CB2 Compression Method    0008 (8) 'Deflated'\n-44CB4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-44CB8 CRC                   0FF19131 (267489585)\n-44CBC Compressed Size       0000057D (1405)\n-44CC0 Uncompressed Size     00000DC2 (3522)\n-44CC4 Filename Length       0082 (130)\n-44CC6 Extra Length          0000 (0)\n-44CC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+44C80 Compression Method    0008 (8) 'Deflated'\n+44C82 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+44C86 CRC                   0FF19131 (267489585)\n+44C8A Compressed Size       0000057D (1405)\n+44C8E Uncompressed Size     00000DC2 (3522)\n+44C92 Filename Length       0082 (130)\n+44C94 Extra Length          0000 (0)\n+44C96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x44CC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x44C96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-44D4A PAYLOAD\n+44D18 PAYLOAD\n \n-452C7 LOCAL HEADER #371     04034B50 (67324752)\n-452CB Extract Zip Spec      14 (20) '2.0'\n-452CC Extract OS            00 (0) 'MS-DOS'\n-452CD General Purpose Flag  0800 (2048)\n+45295 LOCAL HEADER #371     04034B50 (67324752)\n+45299 Extract Zip Spec      14 (20) '2.0'\n+4529A Extract OS            00 (0) 'MS-DOS'\n+4529B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-452CF Compression Method    0008 (8) 'Deflated'\n-452D1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-452D5 CRC                   63513D5C (1666268508)\n-452D9 Compressed Size       000003E5 (997)\n-452DD Uncompressed Size     000007C0 (1984)\n-452E1 Filename Length       007F (127)\n-452E3 Extra Length          0000 (0)\n-452E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4529D Compression Method    0008 (8) 'Deflated'\n+4529F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+452A3 CRC                   63513D5C (1666268508)\n+452A7 Compressed Size       000003E5 (997)\n+452AB Uncompressed Size     000007C0 (1984)\n+452AF Filename Length       007F (127)\n+452B1 Extra Length          0000 (0)\n+452B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x452E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x452B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-45364 PAYLOAD\n+45332 PAYLOAD\n \n-45749 LOCAL HEADER #372     04034B50 (67324752)\n-4574D Extract Zip Spec      14 (20) '2.0'\n-4574E Extract OS            00 (0) 'MS-DOS'\n-4574F General Purpose Flag  0800 (2048)\n+45717 LOCAL HEADER #372     04034B50 (67324752)\n+4571B Extract Zip Spec      14 (20) '2.0'\n+4571C Extract OS            00 (0) 'MS-DOS'\n+4571D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-45751 Compression Method    0008 (8) 'Deflated'\n-45753 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-45757 CRC                   99929518 (2576520472)\n-4575B Compressed Size       00000586 (1414)\n-4575F Uncompressed Size     00000EDA (3802)\n-45763 Filename Length       0076 (118)\n-45765 Extra Length          0000 (0)\n-45767 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4571F Compression Method    0008 (8) 'Deflated'\n+45721 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+45725 CRC                   99929518 (2576520472)\n+45729 Compressed Size       00000586 (1414)\n+4572D Uncompressed Size     00000EDA (3802)\n+45731 Filename Length       0076 (118)\n+45733 Extra Length          0000 (0)\n+45735 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x45767: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45735: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-457DD PAYLOAD\n+457AB PAYLOAD\n \n-45D63 LOCAL HEADER #373     04034B50 (67324752)\n-45D67 Extract Zip Spec      14 (20) '2.0'\n-45D68 Extract OS            00 (0) 'MS-DOS'\n-45D69 General Purpose Flag  0800 (2048)\n+45D31 LOCAL HEADER #373     04034B50 (67324752)\n+45D35 Extract Zip Spec      14 (20) '2.0'\n+45D36 Extract OS            00 (0) 'MS-DOS'\n+45D37 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-45D6B Compression Method    0008 (8) 'Deflated'\n-45D6D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-45D71 CRC                   E6BF62E0 (3871302368)\n-45D75 Compressed Size       000003A3 (931)\n-45D79 Uncompressed Size     000008F8 (2296)\n-45D7D Filename Length       0074 (116)\n-45D7F Extra Length          0000 (0)\n-45D81 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+45D39 Compression Method    0008 (8) 'Deflated'\n+45D3B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+45D3F CRC                   E6BF62E0 (3871302368)\n+45D43 Compressed Size       000003A3 (931)\n+45D47 Uncompressed Size     000008F8 (2296)\n+45D4B Filename Length       0074 (116)\n+45D4D Extra Length          0000 (0)\n+45D4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x45D81: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x45D4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-45DF5 PAYLOAD\n+45DC3 PAYLOAD\n \n-46198 LOCAL HEADER #374     04034B50 (67324752)\n-4619C Extract Zip Spec      14 (20) '2.0'\n-4619D Extract OS            00 (0) 'MS-DOS'\n-4619E General Purpose Flag  0800 (2048)\n+46166 LOCAL HEADER #374     04034B50 (67324752)\n+4616A Extract Zip Spec      14 (20) '2.0'\n+4616B Extract OS            00 (0) 'MS-DOS'\n+4616C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-461A0 Compression Method    0008 (8) 'Deflated'\n-461A2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-461A6 CRC                   F05E2331 (4032701233)\n-461AA Compressed Size       00000408 (1032)\n-461AE Uncompressed Size     00000831 (2097)\n-461B2 Filename Length       007B (123)\n-461B4 Extra Length          0000 (0)\n-461B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4616E Compression Method    0008 (8) 'Deflated'\n+46170 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+46174 CRC                   F05E2331 (4032701233)\n+46178 Compressed Size       00000408 (1032)\n+4617C Uncompressed Size     00000831 (2097)\n+46180 Filename Length       007B (123)\n+46182 Extra Length          0000 (0)\n+46184 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x461B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46184: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-46231 PAYLOAD\n+461FF PAYLOAD\n \n-46639 LOCAL HEADER #375     04034B50 (67324752)\n-4663D Extract Zip Spec      14 (20) '2.0'\n-4663E Extract OS            00 (0) 'MS-DOS'\n-4663F General Purpose Flag  0800 (2048)\n+46607 LOCAL HEADER #375     04034B50 (67324752)\n+4660B Extract Zip Spec      14 (20) '2.0'\n+4660C Extract OS            00 (0) 'MS-DOS'\n+4660D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-46641 Compression Method    0008 (8) 'Deflated'\n-46643 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-46647 CRC                   80ED3BA4 (2163030948)\n-4664B Compressed Size       0000055C (1372)\n-4664F Uncompressed Size     000015D0 (5584)\n-46653 Filename Length       0079 (121)\n-46655 Extra Length          0000 (0)\n-46657 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4660F Compression Method    0008 (8) 'Deflated'\n+46611 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+46615 CRC                   80ED3BA4 (2163030948)\n+46619 Compressed Size       0000055C (1372)\n+4661D Uncompressed Size     000015D0 (5584)\n+46621 Filename Length       0079 (121)\n+46623 Extra Length          0000 (0)\n+46625 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x46657: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46625: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-466D0 PAYLOAD\n+4669E PAYLOAD\n \n-46C2C LOCAL HEADER #376     04034B50 (67324752)\n-46C30 Extract Zip Spec      14 (20) '2.0'\n-46C31 Extract OS            00 (0) 'MS-DOS'\n-46C32 General Purpose Flag  0800 (2048)\n+46BFA LOCAL HEADER #376     04034B50 (67324752)\n+46BFE Extract Zip Spec      14 (20) '2.0'\n+46BFF Extract OS            00 (0) 'MS-DOS'\n+46C00 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-46C34 Compression Method    0008 (8) 'Deflated'\n-46C36 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-46C3A CRC                   7018E446 (1880679494)\n-46C3E Compressed Size       000009A0 (2464)\n-46C42 Uncompressed Size     00001FAE (8110)\n-46C46 Filename Length       007F (127)\n-46C48 Extra Length          0000 (0)\n-46C4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+46C02 Compression Method    0008 (8) 'Deflated'\n+46C04 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+46C08 CRC                   7018E446 (1880679494)\n+46C0C Compressed Size       000009A0 (2464)\n+46C10 Uncompressed Size     00001FAE (8110)\n+46C14 Filename Length       007F (127)\n+46C16 Extra Length          0000 (0)\n+46C18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x46C4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x46C18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-46CC9 PAYLOAD\n+46C97 PAYLOAD\n \n-47669 LOCAL HEADER #377     04034B50 (67324752)\n-4766D Extract Zip Spec      14 (20) '2.0'\n-4766E Extract OS            00 (0) 'MS-DOS'\n-4766F General Purpose Flag  0800 (2048)\n+47637 LOCAL HEADER #377     04034B50 (67324752)\n+4763B Extract Zip Spec      14 (20) '2.0'\n+4763C Extract OS            00 (0) 'MS-DOS'\n+4763D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-47671 Compression Method    0008 (8) 'Deflated'\n-47673 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-47677 CRC                   61A0CE5A (1637928538)\n-4767B Compressed Size       0000049F (1183)\n-4767F Uncompressed Size     000012FA (4858)\n-47683 Filename Length       0076 (118)\n-47685 Extra Length          0000 (0)\n-47687 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4763F Compression Method    0008 (8) 'Deflated'\n+47641 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+47645 CRC                   61A0CE5A (1637928538)\n+47649 Compressed Size       0000049F (1183)\n+4764D Uncompressed Size     000012FA (4858)\n+47651 Filename Length       0076 (118)\n+47653 Extra Length          0000 (0)\n+47655 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x47687: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x47655: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-476FD PAYLOAD\n+476CB PAYLOAD\n \n-47B9C LOCAL HEADER #378     04034B50 (67324752)\n-47BA0 Extract Zip Spec      14 (20) '2.0'\n-47BA1 Extract OS            00 (0) 'MS-DOS'\n-47BA2 General Purpose Flag  0800 (2048)\n+47B6A LOCAL HEADER #378     04034B50 (67324752)\n+47B6E Extract Zip Spec      14 (20) '2.0'\n+47B6F Extract OS            00 (0) 'MS-DOS'\n+47B70 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-47BA4 Compression Method    0008 (8) 'Deflated'\n-47BA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-47BAA CRC                   5A804AEF (1518357231)\n-47BAE Compressed Size       00000762 (1890)\n-47BB2 Uncompressed Size     00001311 (4881)\n-47BB6 Filename Length       0079 (121)\n-47BB8 Extra Length          0000 (0)\n-47BBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+47B72 Compression Method    0008 (8) 'Deflated'\n+47B74 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+47B78 CRC                   5A804AEF (1518357231)\n+47B7C Compressed Size       00000762 (1890)\n+47B80 Uncompressed Size     00001311 (4881)\n+47B84 Filename Length       0079 (121)\n+47B86 Extra Length          0000 (0)\n+47B88 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x47BBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x47B88: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-47C33 PAYLOAD\n+47C01 PAYLOAD\n \n-48395 LOCAL HEADER #379     04034B50 (67324752)\n-48399 Extract Zip Spec      14 (20) '2.0'\n-4839A Extract OS            00 (0) 'MS-DOS'\n-4839B General Purpose Flag  0800 (2048)\n+48363 LOCAL HEADER #379     04034B50 (67324752)\n+48367 Extract Zip Spec      14 (20) '2.0'\n+48368 Extract OS            00 (0) 'MS-DOS'\n+48369 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4839D Compression Method    0008 (8) 'Deflated'\n-4839F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-483A3 CRC                   F4A07CA3 (4104158371)\n-483A7 Compressed Size       00000978 (2424)\n-483AB Uncompressed Size     000027E4 (10212)\n-483AF Filename Length       0075 (117)\n-483B1 Extra Length          0000 (0)\n-483B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4836B Compression Method    0008 (8) 'Deflated'\n+4836D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+48371 CRC                   F4A07CA3 (4104158371)\n+48375 Compressed Size       00000978 (2424)\n+48379 Uncompressed Size     000027E4 (10212)\n+4837D Filename Length       0075 (117)\n+4837F Extra Length          0000 (0)\n+48381 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x483B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x48381: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-48428 PAYLOAD\n+483F6 PAYLOAD\n \n-48DA0 LOCAL HEADER #380     04034B50 (67324752)\n-48DA4 Extract Zip Spec      14 (20) '2.0'\n-48DA5 Extract OS            00 (0) 'MS-DOS'\n-48DA6 General Purpose Flag  0800 (2048)\n+48D6E LOCAL HEADER #380     04034B50 (67324752)\n+48D72 Extract Zip Spec      14 (20) '2.0'\n+48D73 Extract OS            00 (0) 'MS-DOS'\n+48D74 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-48DA8 Compression Method    0008 (8) 'Deflated'\n-48DAA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-48DAE CRC                   6E031E40 (1845698112)\n-48DB2 Compressed Size       0000075F (1887)\n-48DB6 Uncompressed Size     00001276 (4726)\n-48DBA Filename Length       007D (125)\n-48DBC Extra Length          0000 (0)\n-48DBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+48D76 Compression Method    0008 (8) 'Deflated'\n+48D78 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+48D7C CRC                   6E031E40 (1845698112)\n+48D80 Compressed Size       0000075F (1887)\n+48D84 Uncompressed Size     00001276 (4726)\n+48D88 Filename Length       007D (125)\n+48D8A Extra Length          0000 (0)\n+48D8C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x48DBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x48D8C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-48E3B PAYLOAD\n+48E09 PAYLOAD\n \n-4959A LOCAL HEADER #381     04034B50 (67324752)\n-4959E Extract Zip Spec      14 (20) '2.0'\n-4959F Extract OS            00 (0) 'MS-DOS'\n-495A0 General Purpose Flag  0800 (2048)\n+49568 LOCAL HEADER #381     04034B50 (67324752)\n+4956C Extract Zip Spec      14 (20) '2.0'\n+4956D Extract OS            00 (0) 'MS-DOS'\n+4956E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-495A2 Compression Method    0008 (8) 'Deflated'\n-495A4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-495A8 CRC                   5987930A (1502057226)\n-495AC Compressed Size       00000501 (1281)\n-495B0 Uncompressed Size     00000BDE (3038)\n-495B4 Filename Length       007C (124)\n-495B6 Extra Length          0000 (0)\n-495B8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+49570 Compression Method    0008 (8) 'Deflated'\n+49572 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+49576 CRC                   5987930A (1502057226)\n+4957A Compressed Size       00000501 (1281)\n+4957E Uncompressed Size     00000BDE (3038)\n+49582 Filename Length       007C (124)\n+49584 Extra Length          0000 (0)\n+49586 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x495B8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x49586: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-49634 PAYLOAD\n+49602 PAYLOAD\n \n-49B35 LOCAL HEADER #382     04034B50 (67324752)\n-49B39 Extract Zip Spec      14 (20) '2.0'\n-49B3A Extract OS            00 (0) 'MS-DOS'\n-49B3B General Purpose Flag  0800 (2048)\n+49B03 LOCAL HEADER #382     04034B50 (67324752)\n+49B07 Extract Zip Spec      14 (20) '2.0'\n+49B08 Extract OS            00 (0) 'MS-DOS'\n+49B09 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-49B3D Compression Method    0008 (8) 'Deflated'\n-49B3F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-49B43 CRC                   CA93F7B9 (3398694841)\n-49B47 Compressed Size       000003F5 (1013)\n-49B4B Uncompressed Size     000008CF (2255)\n-49B4F Filename Length       007D (125)\n-49B51 Extra Length          0000 (0)\n-49B53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+49B0B Compression Method    0008 (8) 'Deflated'\n+49B0D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+49B11 CRC                   CA93F7B9 (3398694841)\n+49B15 Compressed Size       000003F5 (1013)\n+49B19 Uncompressed Size     000008CF (2255)\n+49B1D Filename Length       007D (125)\n+49B1F Extra Length          0000 (0)\n+49B21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x49B53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x49B21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-49BD0 PAYLOAD\n+49B9E PAYLOAD\n \n-49FC5 LOCAL HEADER #383     04034B50 (67324752)\n-49FC9 Extract Zip Spec      14 (20) '2.0'\n-49FCA Extract OS            00 (0) 'MS-DOS'\n-49FCB General Purpose Flag  0800 (2048)\n+49F93 LOCAL HEADER #383     04034B50 (67324752)\n+49F97 Extract Zip Spec      14 (20) '2.0'\n+49F98 Extract OS            00 (0) 'MS-DOS'\n+49F99 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-49FCD Compression Method    0008 (8) 'Deflated'\n-49FCF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-49FD3 CRC                   673E5975 (1732139381)\n-49FD7 Compressed Size       00000507 (1287)\n-49FDB Uncompressed Size     00000CA9 (3241)\n-49FDF Filename Length       007B (123)\n-49FE1 Extra Length          0000 (0)\n-49FE3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+49F9B Compression Method    0008 (8) 'Deflated'\n+49F9D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+49FA1 CRC                   673E5975 (1732139381)\n+49FA5 Compressed Size       00000507 (1287)\n+49FA9 Uncompressed Size     00000CA9 (3241)\n+49FAD Filename Length       007B (123)\n+49FAF Extra Length          0000 (0)\n+49FB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x49FE3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x49FB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4A05E PAYLOAD\n+4A02C PAYLOAD\n \n-4A565 LOCAL HEADER #384     04034B50 (67324752)\n-4A569 Extract Zip Spec      14 (20) '2.0'\n-4A56A Extract OS            00 (0) 'MS-DOS'\n-4A56B General Purpose Flag  0800 (2048)\n+4A533 LOCAL HEADER #384     04034B50 (67324752)\n+4A537 Extract Zip Spec      14 (20) '2.0'\n+4A538 Extract OS            00 (0) 'MS-DOS'\n+4A539 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4A56D Compression Method    0008 (8) 'Deflated'\n-4A56F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4A573 CRC                   2D1E752C (756970796)\n-4A577 Compressed Size       0000177A (6010)\n-4A57B Uncompressed Size     00005038 (20536)\n-4A57F Filename Length       0079 (121)\n-4A581 Extra Length          0000 (0)\n-4A583 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4A53B Compression Method    0008 (8) 'Deflated'\n+4A53D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4A541 CRC                   2D1E752C (756970796)\n+4A545 Compressed Size       0000177A (6010)\n+4A549 Uncompressed Size     00005038 (20536)\n+4A54D Filename Length       0079 (121)\n+4A54F Extra Length          0000 (0)\n+4A551 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4A583: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4A551: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4A5FC PAYLOAD\n+4A5CA PAYLOAD\n \n-4BD76 LOCAL HEADER #385     04034B50 (67324752)\n-4BD7A Extract Zip Spec      14 (20) '2.0'\n-4BD7B Extract OS            00 (0) 'MS-DOS'\n-4BD7C General Purpose Flag  0800 (2048)\n+4BD44 LOCAL HEADER #385     04034B50 (67324752)\n+4BD48 Extract Zip Spec      14 (20) '2.0'\n+4BD49 Extract OS            00 (0) 'MS-DOS'\n+4BD4A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4BD7E Compression Method    0008 (8) 'Deflated'\n-4BD80 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4BD84 CRC                   DB187B38 (3675814712)\n-4BD88 Compressed Size       00000A58 (2648)\n-4BD8C Uncompressed Size     00001A85 (6789)\n-4BD90 Filename Length       0072 (114)\n-4BD92 Extra Length          0000 (0)\n-4BD94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4BD4C Compression Method    0008 (8) 'Deflated'\n+4BD4E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4BD52 CRC                   DB187B38 (3675814712)\n+4BD56 Compressed Size       00000A58 (2648)\n+4BD5A Uncompressed Size     00001A85 (6789)\n+4BD5E Filename Length       0072 (114)\n+4BD60 Extra Length          0000 (0)\n+4BD62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4BD94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4BD62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4BE06 PAYLOAD\n+4BDD4 PAYLOAD\n \n-4C85E LOCAL HEADER #386     04034B50 (67324752)\n-4C862 Extract Zip Spec      14 (20) '2.0'\n-4C863 Extract OS            00 (0) 'MS-DOS'\n-4C864 General Purpose Flag  0800 (2048)\n+4C82C LOCAL HEADER #386     04034B50 (67324752)\n+4C830 Extract Zip Spec      14 (20) '2.0'\n+4C831 Extract OS            00 (0) 'MS-DOS'\n+4C832 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4C866 Compression Method    0008 (8) 'Deflated'\n-4C868 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4C86C CRC                   CD183667 (3440916071)\n-4C870 Compressed Size       00000A45 (2629)\n-4C874 Uncompressed Size     00001A6E (6766)\n-4C878 Filename Length       0073 (115)\n-4C87A Extra Length          0000 (0)\n-4C87C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4C834 Compression Method    0008 (8) 'Deflated'\n+4C836 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4C83A CRC                   CD183667 (3440916071)\n+4C83E Compressed Size       00000A45 (2629)\n+4C842 Uncompressed Size     00001A6E (6766)\n+4C846 Filename Length       0073 (115)\n+4C848 Extra Length          0000 (0)\n+4C84A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4C87C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4C84A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4C8EF PAYLOAD\n+4C8BD PAYLOAD\n \n-4D334 LOCAL HEADER #387     04034B50 (67324752)\n-4D338 Extract Zip Spec      14 (20) '2.0'\n-4D339 Extract OS            00 (0) 'MS-DOS'\n-4D33A General Purpose Flag  0800 (2048)\n+4D302 LOCAL HEADER #387     04034B50 (67324752)\n+4D306 Extract Zip Spec      14 (20) '2.0'\n+4D307 Extract OS            00 (0) 'MS-DOS'\n+4D308 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4D33C Compression Method    0008 (8) 'Deflated'\n-4D33E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4D342 CRC                   0C7DD276 (209572470)\n-4D346 Compressed Size       00000A5A (2650)\n-4D34A Uncompressed Size     00001A92 (6802)\n-4D34E Filename Length       0073 (115)\n-4D350 Extra Length          0000 (0)\n-4D352 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4D30A Compression Method    0008 (8) 'Deflated'\n+4D30C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4D310 CRC                   0C7DD276 (209572470)\n+4D314 Compressed Size       00000A5A (2650)\n+4D318 Uncompressed Size     00001A92 (6802)\n+4D31C Filename Length       0073 (115)\n+4D31E Extra Length          0000 (0)\n+4D320 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4D352: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4D320: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4D3C5 PAYLOAD\n+4D393 PAYLOAD\n \n-4DE1F LOCAL HEADER #388     04034B50 (67324752)\n-4DE23 Extract Zip Spec      14 (20) '2.0'\n-4DE24 Extract OS            00 (0) 'MS-DOS'\n-4DE25 General Purpose Flag  0800 (2048)\n+4DDED LOCAL HEADER #388     04034B50 (67324752)\n+4DDF1 Extract Zip Spec      14 (20) '2.0'\n+4DDF2 Extract OS            00 (0) 'MS-DOS'\n+4DDF3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4DE27 Compression Method    0008 (8) 'Deflated'\n-4DE29 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4DE2D CRC                   60EA12C2 (1625952962)\n-4DE31 Compressed Size       000008AB (2219)\n-4DE35 Uncompressed Size     00001733 (5939)\n-4DE39 Filename Length       0074 (116)\n-4DE3B Extra Length          0000 (0)\n-4DE3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4DDF5 Compression Method    0008 (8) 'Deflated'\n+4DDF7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4DDFB CRC                   60EA12C2 (1625952962)\n+4DDFF Compressed Size       000008AB (2219)\n+4DE03 Uncompressed Size     00001733 (5939)\n+4DE07 Filename Length       0074 (116)\n+4DE09 Extra Length          0000 (0)\n+4DE0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4DE3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4DE0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4DEB1 PAYLOAD\n+4DE7F PAYLOAD\n \n-4E75C LOCAL HEADER #389     04034B50 (67324752)\n-4E760 Extract Zip Spec      14 (20) '2.0'\n-4E761 Extract OS            00 (0) 'MS-DOS'\n-4E762 General Purpose Flag  0800 (2048)\n+4E72A LOCAL HEADER #389     04034B50 (67324752)\n+4E72E Extract Zip Spec      14 (20) '2.0'\n+4E72F Extract OS            00 (0) 'MS-DOS'\n+4E730 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4E764 Compression Method    0008 (8) 'Deflated'\n-4E766 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4E76A CRC                   4BB1EABD (1269951165)\n-4E76E Compressed Size       00000764 (1892)\n-4E772 Uncompressed Size     0000167D (5757)\n-4E776 Filename Length       0077 (119)\n-4E778 Extra Length          0000 (0)\n-4E77A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4E732 Compression Method    0008 (8) 'Deflated'\n+4E734 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4E738 CRC                   4BB1EABD (1269951165)\n+4E73C Compressed Size       00000764 (1892)\n+4E740 Uncompressed Size     0000167D (5757)\n+4E744 Filename Length       0077 (119)\n+4E746 Extra Length          0000 (0)\n+4E748 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4E77A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4E748: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4E7F1 PAYLOAD\n+4E7BF PAYLOAD\n \n-4EF55 LOCAL HEADER #390     04034B50 (67324752)\n-4EF59 Extract Zip Spec      14 (20) '2.0'\n-4EF5A Extract OS            00 (0) 'MS-DOS'\n-4EF5B General Purpose Flag  0800 (2048)\n+4EF23 LOCAL HEADER #390     04034B50 (67324752)\n+4EF27 Extract Zip Spec      14 (20) '2.0'\n+4EF28 Extract OS            00 (0) 'MS-DOS'\n+4EF29 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-4EF5D Compression Method    0008 (8) 'Deflated'\n-4EF5F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-4EF63 CRC                   A18A8EB9 (2710212281)\n-4EF67 Compressed Size       000011B4 (4532)\n-4EF6B Uncompressed Size     0000328A (12938)\n-4EF6F Filename Length       0077 (119)\n-4EF71 Extra Length          0000 (0)\n-4EF73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+4EF2B Compression Method    0008 (8) 'Deflated'\n+4EF2D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+4EF31 CRC                   A18A8EB9 (2710212281)\n+4EF35 Compressed Size       000011B4 (4532)\n+4EF39 Uncompressed Size     0000328A (12938)\n+4EF3D Filename Length       0077 (119)\n+4EF3F Extra Length          0000 (0)\n+4EF41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x4EF73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x4EF41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-4EFEA PAYLOAD\n+4EFB8 PAYLOAD\n \n-5019E LOCAL HEADER #391     04034B50 (67324752)\n-501A2 Extract Zip Spec      14 (20) '2.0'\n-501A3 Extract OS            00 (0) 'MS-DOS'\n-501A4 General Purpose Flag  0800 (2048)\n+5016C LOCAL HEADER #391     04034B50 (67324752)\n+50170 Extract Zip Spec      14 (20) '2.0'\n+50171 Extract OS            00 (0) 'MS-DOS'\n+50172 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-501A6 Compression Method    0008 (8) 'Deflated'\n-501A8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-501AC CRC                   B7B762D6 (3082248918)\n-501B0 Compressed Size       0000132C (4908)\n-501B4 Uncompressed Size     00003879 (14457)\n-501B8 Filename Length       0076 (118)\n-501BA Extra Length          0000 (0)\n-501BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+50174 Compression Method    0008 (8) 'Deflated'\n+50176 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5017A CRC                   B7B762D6 (3082248918)\n+5017E Compressed Size       0000132C (4908)\n+50182 Uncompressed Size     00003879 (14457)\n+50186 Filename Length       0076 (118)\n+50188 Extra Length          0000 (0)\n+5018A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x501BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5018A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-50232 PAYLOAD\n+50200 PAYLOAD\n \n-5155E LOCAL HEADER #392     04034B50 (67324752)\n-51562 Extract Zip Spec      14 (20) '2.0'\n-51563 Extract OS            00 (0) 'MS-DOS'\n-51564 General Purpose Flag  0800 (2048)\n+5152C LOCAL HEADER #392     04034B50 (67324752)\n+51530 Extract Zip Spec      14 (20) '2.0'\n+51531 Extract OS            00 (0) 'MS-DOS'\n+51532 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-51566 Compression Method    0008 (8) 'Deflated'\n-51568 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5156C CRC                   A2B9D29A (2730087066)\n-51570 Compressed Size       00000B19 (2841)\n-51574 Uncompressed Size     00002150 (8528)\n-51578 Filename Length       007A (122)\n-5157A Extra Length          0000 (0)\n-5157C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+51534 Compression Method    0008 (8) 'Deflated'\n+51536 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5153A CRC                   A2B9D29A (2730087066)\n+5153E Compressed Size       00000B19 (2841)\n+51542 Uncompressed Size     00002150 (8528)\n+51546 Filename Length       007A (122)\n+51548 Extra Length          0000 (0)\n+5154A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5157C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5154A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-515F6 PAYLOAD\n+515C4 PAYLOAD\n \n-5210F LOCAL HEADER #393     04034B50 (67324752)\n-52113 Extract Zip Spec      14 (20) '2.0'\n-52114 Extract OS            00 (0) 'MS-DOS'\n-52115 General Purpose Flag  0800 (2048)\n+520DD LOCAL HEADER #393     04034B50 (67324752)\n+520E1 Extract Zip Spec      14 (20) '2.0'\n+520E2 Extract OS            00 (0) 'MS-DOS'\n+520E3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-52117 Compression Method    0008 (8) 'Deflated'\n-52119 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5211D CRC                   C4FC7EA2 (3304881826)\n-52121 Compressed Size       00000790 (1936)\n-52125 Uncompressed Size     000011DC (4572)\n-52129 Filename Length       0073 (115)\n-5212B Extra Length          0000 (0)\n-5212D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+520E5 Compression Method    0008 (8) 'Deflated'\n+520E7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+520EB CRC                   C4FC7EA2 (3304881826)\n+520EF Compressed Size       00000790 (1936)\n+520F3 Uncompressed Size     000011DC (4572)\n+520F7 Filename Length       0073 (115)\n+520F9 Extra Length          0000 (0)\n+520FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5212D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x520FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-521A0 PAYLOAD\n+5216E PAYLOAD\n \n-52930 LOCAL HEADER #394     04034B50 (67324752)\n-52934 Extract Zip Spec      14 (20) '2.0'\n-52935 Extract OS            00 (0) 'MS-DOS'\n-52936 General Purpose Flag  0800 (2048)\n+528FE LOCAL HEADER #394     04034B50 (67324752)\n+52902 Extract Zip Spec      14 (20) '2.0'\n+52903 Extract OS            00 (0) 'MS-DOS'\n+52904 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-52938 Compression Method    0008 (8) 'Deflated'\n-5293A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5293E CRC                   EE30A8D8 (3996166360)\n-52942 Compressed Size       00001911 (6417)\n-52946 Uncompressed Size     000072FB (29435)\n-5294A Filename Length       0076 (118)\n-5294C Extra Length          0000 (0)\n-5294E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+52906 Compression Method    0008 (8) 'Deflated'\n+52908 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5290C CRC                   EE30A8D8 (3996166360)\n+52910 Compressed Size       00001911 (6417)\n+52914 Uncompressed Size     000072FB (29435)\n+52918 Filename Length       0076 (118)\n+5291A Extra Length          0000 (0)\n+5291C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5294E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5291C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-529C4 PAYLOAD\n+52992 PAYLOAD\n \n-542D5 LOCAL HEADER #395     04034B50 (67324752)\n-542D9 Extract Zip Spec      14 (20) '2.0'\n-542DA Extract OS            00 (0) 'MS-DOS'\n-542DB General Purpose Flag  0800 (2048)\n+542A3 LOCAL HEADER #395     04034B50 (67324752)\n+542A7 Extract Zip Spec      14 (20) '2.0'\n+542A8 Extract OS            00 (0) 'MS-DOS'\n+542A9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-542DD Compression Method    0008 (8) 'Deflated'\n-542DF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-542E3 CRC                   EA36353C (3929421116)\n-542E7 Compressed Size       0000104B (4171)\n-542EB Uncompressed Size     0000480E (18446)\n-542EF Filename Length       007C (124)\n-542F1 Extra Length          0000 (0)\n-542F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+542AB Compression Method    0008 (8) 'Deflated'\n+542AD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+542B1 CRC                   EA36353C (3929421116)\n+542B5 Compressed Size       0000104B (4171)\n+542B9 Uncompressed Size     0000480E (18446)\n+542BD Filename Length       007C (124)\n+542BF Extra Length          0000 (0)\n+542C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x542F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x542C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5436F PAYLOAD\n+5433D PAYLOAD\n \n-553BA LOCAL HEADER #396     04034B50 (67324752)\n-553BE Extract Zip Spec      14 (20) '2.0'\n-553BF Extract OS            00 (0) 'MS-DOS'\n-553C0 General Purpose Flag  0800 (2048)\n+55388 LOCAL HEADER #396     04034B50 (67324752)\n+5538C Extract Zip Spec      14 (20) '2.0'\n+5538D Extract OS            00 (0) 'MS-DOS'\n+5538E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-553C2 Compression Method    0008 (8) 'Deflated'\n-553C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-553C8 CRC                   CA474DE0 (3393670624)\n-553CC Compressed Size       0000039D (925)\n-553D0 Uncompressed Size     000007B6 (1974)\n-553D4 Filename Length       007B (123)\n-553D6 Extra Length          0000 (0)\n-553D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+55390 Compression Method    0008 (8) 'Deflated'\n+55392 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+55396 CRC                   CA474DE0 (3393670624)\n+5539A Compressed Size       0000039D (925)\n+5539E Uncompressed Size     000007B6 (1974)\n+553A2 Filename Length       007B (123)\n+553A4 Extra Length          0000 (0)\n+553A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x553D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x553A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-55453 PAYLOAD\n+55421 PAYLOAD\n \n-557F0 LOCAL HEADER #397     04034B50 (67324752)\n-557F4 Extract Zip Spec      14 (20) '2.0'\n-557F5 Extract OS            00 (0) 'MS-DOS'\n-557F6 General Purpose Flag  0800 (2048)\n+557BE LOCAL HEADER #397     04034B50 (67324752)\n+557C2 Extract Zip Spec      14 (20) '2.0'\n+557C3 Extract OS            00 (0) 'MS-DOS'\n+557C4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-557F8 Compression Method    0008 (8) 'Deflated'\n-557FA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-557FE CRC                   A19F99D4 (2711591380)\n-55802 Compressed Size       0000065E (1630)\n-55806 Uncompressed Size     000011CB (4555)\n-5580A Filename Length       0077 (119)\n-5580C Extra Length          0000 (0)\n-5580E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+557C6 Compression Method    0008 (8) 'Deflated'\n+557C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+557CC CRC                   A19F99D4 (2711591380)\n+557D0 Compressed Size       0000065E (1630)\n+557D4 Uncompressed Size     000011CB (4555)\n+557D8 Filename Length       0077 (119)\n+557DA Extra Length          0000 (0)\n+557DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5580E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x557DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-55885 PAYLOAD\n+55853 PAYLOAD\n \n-55EE3 LOCAL HEADER #398     04034B50 (67324752)\n-55EE7 Extract Zip Spec      14 (20) '2.0'\n-55EE8 Extract OS            00 (0) 'MS-DOS'\n-55EE9 General Purpose Flag  0800 (2048)\n+55EB1 LOCAL HEADER #398     04034B50 (67324752)\n+55EB5 Extract Zip Spec      14 (20) '2.0'\n+55EB6 Extract OS            00 (0) 'MS-DOS'\n+55EB7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-55EEB Compression Method    0008 (8) 'Deflated'\n-55EED Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-55EF1 CRC                   7573E84B (1970530379)\n-55EF5 Compressed Size       00000ED9 (3801)\n-55EF9 Uncompressed Size     0000284F (10319)\n-55EFD Filename Length       0073 (115)\n-55EFF Extra Length          0000 (0)\n-55F01 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+55EB9 Compression Method    0008 (8) 'Deflated'\n+55EBB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+55EBF CRC                   7573E84B (1970530379)\n+55EC3 Compressed Size       00000ED9 (3801)\n+55EC7 Uncompressed Size     0000284F (10319)\n+55ECB Filename Length       0073 (115)\n+55ECD Extra Length          0000 (0)\n+55ECF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x55F01: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x55ECF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-55F74 PAYLOAD\n+55F42 PAYLOAD\n \n-56E4D LOCAL HEADER #399     04034B50 (67324752)\n-56E51 Extract Zip Spec      14 (20) '2.0'\n-56E52 Extract OS            00 (0) 'MS-DOS'\n-56E53 General Purpose Flag  0800 (2048)\n+56E1B LOCAL HEADER #399     04034B50 (67324752)\n+56E1F Extract Zip Spec      14 (20) '2.0'\n+56E20 Extract OS            00 (0) 'MS-DOS'\n+56E21 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-56E55 Compression Method    0008 (8) 'Deflated'\n-56E57 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-56E5B CRC                   131CB9D8 (320649688)\n-56E5F Compressed Size       00000B4D (2893)\n-56E63 Uncompressed Size     00002777 (10103)\n-56E67 Filename Length       0077 (119)\n-56E69 Extra Length          0000 (0)\n-56E6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+56E23 Compression Method    0008 (8) 'Deflated'\n+56E25 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+56E29 CRC                   131CB9D8 (320649688)\n+56E2D Compressed Size       00000B4D (2893)\n+56E31 Uncompressed Size     00002777 (10103)\n+56E35 Filename Length       0077 (119)\n+56E37 Extra Length          0000 (0)\n+56E39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x56E6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x56E39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-56EE2 PAYLOAD\n+56EB0 PAYLOAD\n \n-57A2F LOCAL HEADER #400     04034B50 (67324752)\n-57A33 Extract Zip Spec      14 (20) '2.0'\n-57A34 Extract OS            00 (0) 'MS-DOS'\n-57A35 General Purpose Flag  0800 (2048)\n+579FD LOCAL HEADER #400     04034B50 (67324752)\n+57A01 Extract Zip Spec      14 (20) '2.0'\n+57A02 Extract OS            00 (0) 'MS-DOS'\n+57A03 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-57A37 Compression Method    0008 (8) 'Deflated'\n-57A39 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-57A3D CRC                   95FAB1DA (2516234714)\n-57A41 Compressed Size       00000678 (1656)\n-57A45 Uncompressed Size     0000110D (4365)\n-57A49 Filename Length       0076 (118)\n-57A4B Extra Length          0000 (0)\n-57A4D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+57A05 Compression Method    0008 (8) 'Deflated'\n+57A07 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+57A0B CRC                   95FAB1DA (2516234714)\n+57A0F Compressed Size       00000678 (1656)\n+57A13 Uncompressed Size     0000110D (4365)\n+57A17 Filename Length       0076 (118)\n+57A19 Extra Length          0000 (0)\n+57A1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x57A4D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x57A1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-57AC3 PAYLOAD\n+57A91 PAYLOAD\n \n-5813B LOCAL HEADER #401     04034B50 (67324752)\n-5813F Extract Zip Spec      14 (20) '2.0'\n-58140 Extract OS            00 (0) 'MS-DOS'\n-58141 General Purpose Flag  0800 (2048)\n+58109 LOCAL HEADER #401     04034B50 (67324752)\n+5810D Extract Zip Spec      14 (20) '2.0'\n+5810E Extract OS            00 (0) 'MS-DOS'\n+5810F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-58143 Compression Method    0008 (8) 'Deflated'\n-58145 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-58149 CRC                   B1E82858 (2984781912)\n-5814D Compressed Size       000007DE (2014)\n-58151 Uncompressed Size     000019D6 (6614)\n-58155 Filename Length       0079 (121)\n-58157 Extra Length          0000 (0)\n-58159 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+58111 Compression Method    0008 (8) 'Deflated'\n+58113 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+58117 CRC                   B1E82858 (2984781912)\n+5811B Compressed Size       000007DE (2014)\n+5811F Uncompressed Size     000019D6 (6614)\n+58123 Filename Length       0079 (121)\n+58125 Extra Length          0000 (0)\n+58127 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x58159: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x58127: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-581D2 PAYLOAD\n+581A0 PAYLOAD\n \n-589B0 LOCAL HEADER #402     04034B50 (67324752)\n-589B4 Extract Zip Spec      14 (20) '2.0'\n-589B5 Extract OS            00 (0) 'MS-DOS'\n-589B6 General Purpose Flag  0800 (2048)\n+5897E LOCAL HEADER #402     04034B50 (67324752)\n+58982 Extract Zip Spec      14 (20) '2.0'\n+58983 Extract OS            00 (0) 'MS-DOS'\n+58984 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-589B8 Compression Method    0008 (8) 'Deflated'\n-589BA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-589BE CRC                   EA13965E (3927152222)\n-589C2 Compressed Size       00000529 (1321)\n-589C6 Uncompressed Size     00000F7E (3966)\n-589CA Filename Length       0076 (118)\n-589CC Extra Length          0000 (0)\n-589CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+58986 Compression Method    0008 (8) 'Deflated'\n+58988 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5898C CRC                   EA13965E (3927152222)\n+58990 Compressed Size       00000529 (1321)\n+58994 Uncompressed Size     00000F7E (3966)\n+58998 Filename Length       0076 (118)\n+5899A Extra Length          0000 (0)\n+5899C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x589CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5899C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-58A44 PAYLOAD\n+58A12 PAYLOAD\n \n-58F6D LOCAL HEADER #403     04034B50 (67324752)\n-58F71 Extract Zip Spec      14 (20) '2.0'\n-58F72 Extract OS            00 (0) 'MS-DOS'\n-58F73 General Purpose Flag  0800 (2048)\n+58F3B LOCAL HEADER #403     04034B50 (67324752)\n+58F3F Extract Zip Spec      14 (20) '2.0'\n+58F40 Extract OS            00 (0) 'MS-DOS'\n+58F41 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-58F75 Compression Method    0008 (8) 'Deflated'\n-58F77 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-58F7B CRC                   C8903588 (3364894088)\n-58F7F Compressed Size       00000D5E (3422)\n-58F83 Uncompressed Size     00002CD6 (11478)\n-58F87 Filename Length       006F (111)\n-58F89 Extra Length          0000 (0)\n-58F8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+58F43 Compression Method    0008 (8) 'Deflated'\n+58F45 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+58F49 CRC                   C8903588 (3364894088)\n+58F4D Compressed Size       00000D5E (3422)\n+58F51 Uncompressed Size     00002CD6 (11478)\n+58F55 Filename Length       006F (111)\n+58F57 Extra Length          0000 (0)\n+58F59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x58F8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x58F59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-58FFA PAYLOAD\n+58FC8 PAYLOAD\n \n-59D58 LOCAL HEADER #404     04034B50 (67324752)\n-59D5C Extract Zip Spec      14 (20) '2.0'\n-59D5D Extract OS            00 (0) 'MS-DOS'\n-59D5E General Purpose Flag  0800 (2048)\n+59D26 LOCAL HEADER #404     04034B50 (67324752)\n+59D2A Extract Zip Spec      14 (20) '2.0'\n+59D2B Extract OS            00 (0) 'MS-DOS'\n+59D2C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-59D60 Compression Method    0008 (8) 'Deflated'\n-59D62 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-59D66 CRC                   D19560D0 (3516227792)\n-59D6A Compressed Size       000003BB (955)\n-59D6E Uncompressed Size     00000A2F (2607)\n-59D72 Filename Length       0080 (128)\n-59D74 Extra Length          0000 (0)\n-59D76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+59D2E Compression Method    0008 (8) 'Deflated'\n+59D30 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+59D34 CRC                   D19560D0 (3516227792)\n+59D38 Compressed Size       000003BB (955)\n+59D3C Uncompressed Size     00000A2F (2607)\n+59D40 Filename Length       0080 (128)\n+59D42 Extra Length          0000 (0)\n+59D44 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x59D76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x59D44: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-59DF6 PAYLOAD\n+59DC4 PAYLOAD\n \n-5A1B1 LOCAL HEADER #405     04034B50 (67324752)\n-5A1B5 Extract Zip Spec      14 (20) '2.0'\n-5A1B6 Extract OS            00 (0) 'MS-DOS'\n-5A1B7 General Purpose Flag  0800 (2048)\n+5A17F LOCAL HEADER #405     04034B50 (67324752)\n+5A183 Extract Zip Spec      14 (20) '2.0'\n+5A184 Extract OS            00 (0) 'MS-DOS'\n+5A185 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5A1B9 Compression Method    0008 (8) 'Deflated'\n-5A1BB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5A1BF CRC                   CB05D09B (3406155931)\n-5A1C3 Compressed Size       000017FC (6140)\n-5A1C7 Uncompressed Size     00005230 (21040)\n-5A1CB Filename Length       0084 (132)\n-5A1CD Extra Length          0000 (0)\n-5A1CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5A187 Compression Method    0008 (8) 'Deflated'\n+5A189 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5A18D CRC                   CB05D09B (3406155931)\n+5A191 Compressed Size       000017FC (6140)\n+5A195 Uncompressed Size     00005230 (21040)\n+5A199 Filename Length       0084 (132)\n+5A19B Extra Length          0000 (0)\n+5A19D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0x5A1CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5A19D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5A253 PAYLOAD\n+5A221 PAYLOAD\n \n-5BA4F LOCAL HEADER #406     04034B50 (67324752)\n-5BA53 Extract Zip Spec      14 (20) '2.0'\n-5BA54 Extract OS            00 (0) 'MS-DOS'\n-5BA55 General Purpose Flag  0800 (2048)\n+5BA1D LOCAL HEADER #406     04034B50 (67324752)\n+5BA21 Extract Zip Spec      14 (20) '2.0'\n+5BA22 Extract OS            00 (0) 'MS-DOS'\n+5BA23 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5BA57 Compression Method    0008 (8) 'Deflated'\n-5BA59 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5BA5D CRC                   17E2323C (400699964)\n-5BA61 Compressed Size       00000487 (1159)\n-5BA65 Uncompressed Size     00000904 (2308)\n-5BA69 Filename Length       0088 (136)\n-5BA6B Extra Length          0000 (0)\n-5BA6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5BA25 Compression Method    0008 (8) 'Deflated'\n+5BA27 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5BA2B CRC                   17E2323C (400699964)\n+5BA2F Compressed Size       00000487 (1159)\n+5BA33 Uncompressed Size     00000904 (2308)\n+5BA37 Filename Length       0088 (136)\n+5BA39 Extra Length          0000 (0)\n+5BA3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0x5BA6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5BA3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5BAF5 PAYLOAD\n+5BAC3 PAYLOAD\n \n-5BF7C LOCAL HEADER #407     04034B50 (67324752)\n-5BF80 Extract Zip Spec      14 (20) '2.0'\n-5BF81 Extract OS            00 (0) 'MS-DOS'\n-5BF82 General Purpose Flag  0800 (2048)\n+5BF4A LOCAL HEADER #407     04034B50 (67324752)\n+5BF4E Extract Zip Spec      14 (20) '2.0'\n+5BF4F Extract OS            00 (0) 'MS-DOS'\n+5BF50 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5BF84 Compression Method    0008 (8) 'Deflated'\n-5BF86 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5BF8A CRC                   CC28EBBC (3425233852)\n-5BF8E Compressed Size       00000776 (1910)\n-5BF92 Uncompressed Size     00001036 (4150)\n-5BF96 Filename Length       0093 (147)\n-5BF98 Extra Length          0000 (0)\n-5BF9A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5BF52 Compression Method    0008 (8) 'Deflated'\n+5BF54 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5BF58 CRC                   CC28EBBC (3425233852)\n+5BF5C Compressed Size       00000776 (1910)\n+5BF60 Uncompressed Size     00001036 (4150)\n+5BF64 Filename Length       0093 (147)\n+5BF66 Extra Length          0000 (0)\n+5BF68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5BF9A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5BF68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5C02D PAYLOAD\n+5BFFB PAYLOAD\n \n-5C7A3 LOCAL HEADER #408     04034B50 (67324752)\n-5C7A7 Extract Zip Spec      14 (20) '2.0'\n-5C7A8 Extract OS            00 (0) 'MS-DOS'\n-5C7A9 General Purpose Flag  0800 (2048)\n+5C771 LOCAL HEADER #408     04034B50 (67324752)\n+5C775 Extract Zip Spec      14 (20) '2.0'\n+5C776 Extract OS            00 (0) 'MS-DOS'\n+5C777 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5C7AB Compression Method    0008 (8) 'Deflated'\n-5C7AD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5C7B1 CRC                   3FC95820 (1070159904)\n-5C7B5 Compressed Size       000004B8 (1208)\n-5C7B9 Uncompressed Size     00000AD4 (2772)\n-5C7BD Filename Length       0084 (132)\n-5C7BF Extra Length          0000 (0)\n-5C7C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+5C779 Compression Method    0008 (8) 'Deflated'\n+5C77B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5C77F CRC                   3FC95820 (1070159904)\n+5C783 Compressed Size       000004B8 (1208)\n+5C787 Uncompressed Size     00000AD4 (2772)\n+5C78B Filename Length       0084 (132)\n+5C78D Extra Length          0000 (0)\n+5C78F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0x5C7C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5C78F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5C845 PAYLOAD\n+5C813 PAYLOAD\n \n-5CCFD LOCAL HEADER #409     04034B50 (67324752)\n-5CD01 Extract Zip Spec      14 (20) '2.0'\n-5CD02 Extract OS            00 (0) 'MS-DOS'\n-5CD03 General Purpose Flag  0800 (2048)\n+5CCCB LOCAL HEADER #409     04034B50 (67324752)\n+5CCCF Extract Zip Spec      14 (20) '2.0'\n+5CCD0 Extract OS            00 (0) 'MS-DOS'\n+5CCD1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5CD05 Compression Method    0008 (8) 'Deflated'\n-5CD07 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5CD0B CRC                   41CBDE11 (1103879697)\n-5CD0F Compressed Size       000005EA (1514)\n-5CD13 Uncompressed Size     00000D2F (3375)\n-5CD17 Filename Length       0073 (115)\n-5CD19 Extra Length          0000 (0)\n-5CD1B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5CCD3 Compression Method    0008 (8) 'Deflated'\n+5CCD5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5CCD9 CRC                   41CBDE11 (1103879697)\n+5CCDD Compressed Size       000005EA (1514)\n+5CCE1 Uncompressed Size     00000D2F (3375)\n+5CCE5 Filename Length       0073 (115)\n+5CCE7 Extra Length          0000 (0)\n+5CCE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5CD1B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5CCE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5CD8E PAYLOAD\n+5CD5C PAYLOAD\n \n-5D378 LOCAL HEADER #410     04034B50 (67324752)\n-5D37C Extract Zip Spec      14 (20) '2.0'\n-5D37D Extract OS            00 (0) 'MS-DOS'\n-5D37E General Purpose Flag  0800 (2048)\n+5D346 LOCAL HEADER #410     04034B50 (67324752)\n+5D34A Extract Zip Spec      14 (20) '2.0'\n+5D34B Extract OS            00 (0) 'MS-DOS'\n+5D34C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5D380 Compression Method    0008 (8) 'Deflated'\n-5D382 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5D386 CRC                   1D768ED5 (494309077)\n-5D38A Compressed Size       00000834 (2100)\n-5D38E Uncompressed Size     00001C79 (7289)\n-5D392 Filename Length       0079 (121)\n-5D394 Extra Length          0000 (0)\n-5D396 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5D34E Compression Method    0008 (8) 'Deflated'\n+5D350 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5D354 CRC                   1D768ED5 (494309077)\n+5D358 Compressed Size       00000834 (2100)\n+5D35C Uncompressed Size     00001C79 (7289)\n+5D360 Filename Length       0079 (121)\n+5D362 Extra Length          0000 (0)\n+5D364 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5D396: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5D364: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5D40F PAYLOAD\n+5D3DD PAYLOAD\n \n-5DC43 LOCAL HEADER #411     04034B50 (67324752)\n-5DC47 Extract Zip Spec      14 (20) '2.0'\n-5DC48 Extract OS            00 (0) 'MS-DOS'\n-5DC49 General Purpose Flag  0800 (2048)\n+5DC11 LOCAL HEADER #411     04034B50 (67324752)\n+5DC15 Extract Zip Spec      14 (20) '2.0'\n+5DC16 Extract OS            00 (0) 'MS-DOS'\n+5DC17 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5DC4B Compression Method    0008 (8) 'Deflated'\n-5DC4D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5DC51 CRC                   7A85C658 (2055587416)\n-5DC55 Compressed Size       0000085F (2143)\n-5DC59 Uncompressed Size     00001D19 (7449)\n-5DC5D Filename Length       0081 (129)\n-5DC5F Extra Length          0000 (0)\n-5DC61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5DC19 Compression Method    0008 (8) 'Deflated'\n+5DC1B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5DC1F CRC                   7A85C658 (2055587416)\n+5DC23 Compressed Size       0000085F (2143)\n+5DC27 Uncompressed Size     00001D19 (7449)\n+5DC2B Filename Length       0081 (129)\n+5DC2D Extra Length          0000 (0)\n+5DC2F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5DC61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5DC2F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5DCE2 PAYLOAD\n+5DCB0 PAYLOAD\n \n-5E541 LOCAL HEADER #412     04034B50 (67324752)\n-5E545 Extract Zip Spec      14 (20) '2.0'\n-5E546 Extract OS            00 (0) 'MS-DOS'\n-5E547 General Purpose Flag  0800 (2048)\n+5E50F LOCAL HEADER #412     04034B50 (67324752)\n+5E513 Extract Zip Spec      14 (20) '2.0'\n+5E514 Extract OS            00 (0) 'MS-DOS'\n+5E515 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-5E549 Compression Method    0008 (8) 'Deflated'\n-5E54B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-5E54F CRC                   907F6F99 (2424270745)\n-5E553 Compressed Size       0006AD4F (437583)\n-5E557 Uncompressed Size     0042155F (4330847)\n-5E55B Filename Length       001A (26)\n-5E55D Extra Length          0000 (0)\n-5E55F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+5E517 Compression Method    0008 (8) 'Deflated'\n+5E519 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+5E51D CRC                   9E31BAE2 (2654059234)\n+5E521 Compressed Size       0006B2FF (439039)\n+5E525 Uncompressed Size     00421547 (4330823)\n+5E529 Filename Length       001A (26)\n+5E52B Extra Length          0000 (0)\n+5E52D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0x5E55F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0x5E52D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-5E579 PAYLOAD\n+5E547 PAYLOAD\n \n-C92C8 LOCAL HEADER #413     04034B50 (67324752)\n-C92CC Extract Zip Spec      14 (20) '2.0'\n-C92CD Extract OS            00 (0) 'MS-DOS'\n-C92CE General Purpose Flag  0800 (2048)\n+C9846 LOCAL HEADER #413     04034B50 (67324752)\n+C984A Extract Zip Spec      14 (20) '2.0'\n+C984B Extract OS            00 (0) 'MS-DOS'\n+C984C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-C92D0 Compression Method    0008 (8) 'Deflated'\n-C92D2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C92D6 CRC                   E19FACFF (3785338111)\n-C92DA Compressed Size       000007BF (1983)\n-C92DE Uncompressed Size     00001EAA (7850)\n-C92E2 Filename Length       003C (60)\n-C92E4 Extra Length          0000 (0)\n-C92E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+C984E Compression Method    0008 (8) 'Deflated'\n+C9850 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+C9854 CRC                   E19FACFF (3785338111)\n+C9858 Compressed Size       000007BF (1983)\n+C985C Uncompressed Size     00001EAA (7850)\n+C9860 Filename Length       003C (60)\n+C9862 Extra Length          0000 (0)\n+C9864 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC92E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xC9864: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-C9322 PAYLOAD\n+C98A0 PAYLOAD\n \n-C9AE1 LOCAL HEADER #414     04034B50 (67324752)\n-C9AE5 Extract Zip Spec      14 (20) '2.0'\n-C9AE6 Extract OS            00 (0) 'MS-DOS'\n-C9AE7 General Purpose Flag  0800 (2048)\n+CA05F LOCAL HEADER #414     04034B50 (67324752)\n+CA063 Extract Zip Spec      14 (20) '2.0'\n+CA064 Extract OS            00 (0) 'MS-DOS'\n+CA065 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-C9AE9 Compression Method    0008 (8) 'Deflated'\n-C9AEB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9AEF CRC                   E1CBB499 (3788223641)\n-C9AF3 Compressed Size       00000047 (71)\n-C9AF7 Uncompressed Size     0000004A (74)\n-C9AFB Filename Length       0043 (67)\n-C9AFD Extra Length          0000 (0)\n-C9AFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA067 Compression Method    0008 (8) 'Deflated'\n+CA069 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA06D CRC                   E1CBB499 (3788223641)\n+CA071 Compressed Size       00000047 (71)\n+CA075 Uncompressed Size     0000004A (74)\n+CA079 Filename Length       0043 (67)\n+CA07B Extra Length          0000 (0)\n+CA07D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9AFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA07D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-C9B42 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+CA0C0 PAYLOAD               XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n \n-C9B89 CENTRAL HEADER #1     02014B50 (33639248)\n-C9B8D Created Zip Spec      14 (20) '2.0'\n-C9B8E Created OS            03 (3) 'Unix'\n-C9B8F Extract Zip Spec      0A (10) '1.0'\n-C9B90 Extract OS            00 (0) 'MS-DOS'\n-C9B91 General Purpose Flag  0800 (2048)\n+CA107 CENTRAL HEADER #1     02014B50 (33639248)\n+CA10B Created Zip Spec      14 (20) '2.0'\n+CA10C Created OS            03 (3) 'Unix'\n+CA10D Extract Zip Spec      0A (10) '1.0'\n+CA10E Extract OS            00 (0) 'MS-DOS'\n+CA10F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9B93 Compression Method    0000 (0) 'Stored'\n-C9B95 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9B99 CRC                   00000000 (0)\n-C9B9D Compressed Size       00000000 (0)\n-C9BA1 Uncompressed Size     00000000 (0)\n-C9BA5 Filename Length       0009 (9)\n-C9BA7 Extra Length          0000 (0)\n-C9BA9 Comment Length        0000 (0)\n-C9BAB Disk Start            0000 (0)\n-C9BAD Int File Attributes   0000 (0)\n+CA111 Compression Method    0000 (0) 'Stored'\n+CA113 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA117 CRC                   00000000 (0)\n+CA11B Compressed Size       00000000 (0)\n+CA11F Uncompressed Size     00000000 (0)\n+CA123 Filename Length       0009 (9)\n+CA125 Extra Length          0000 (0)\n+CA127 Comment Length        0000 (0)\n+CA129 Disk Start            0000 (0)\n+CA12B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9BAF Ext File Attributes   41ED0010 (1106051088)\n+CA12D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9BB3 Local Header Offset   00000000 (0)\n-C9BB7 Filename              'XXXXXXXXX'\n+CA131 Local Header Offset   00000000 (0)\n+CA135 Filename              'XXXXXXXXX'\n #\n-# WARNING: Offset 0xC9BB7: Filename 'XXXXXXXXX'\n+# WARNING: Offset 0xCA135: Filename 'XXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9BB7: Directory 'XXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA135: Directory 'XXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9B8F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n+# WARNING: Offset 0xCA10D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXX'\n #\n \n-C9BC0 CENTRAL HEADER #2     02014B50 (33639248)\n-C9BC4 Created Zip Spec      14 (20) '2.0'\n-C9BC5 Created OS            03 (3) 'Unix'\n-C9BC6 Extract Zip Spec      14 (20) '2.0'\n-C9BC7 Extract OS            00 (0) 'MS-DOS'\n-C9BC8 General Purpose Flag  0800 (2048)\n+CA13E CENTRAL HEADER #2     02014B50 (33639248)\n+CA142 Created Zip Spec      14 (20) '2.0'\n+CA143 Created OS            03 (3) 'Unix'\n+CA144 Extract Zip Spec      14 (20) '2.0'\n+CA145 Extract OS            00 (0) 'MS-DOS'\n+CA146 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-C9BCA Compression Method    0008 (8) 'Deflated'\n-C9BCC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9BD0 CRC                   5882906D (1484951661)\n-C9BD4 Compressed Size       000000A5 (165)\n-C9BD8 Uncompressed Size     0000013F (319)\n-C9BDC Filename Length       0014 (20)\n-C9BDE Extra Length          0000 (0)\n-C9BE0 Comment Length        0000 (0)\n-C9BE2 Disk Start            0000 (0)\n-C9BE4 Int File Attributes   0000 (0)\n+CA148 Compression Method    0008 (8) 'Deflated'\n+CA14A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA14E CRC                   5882906D (1484951661)\n+CA152 Compressed Size       000000A5 (165)\n+CA156 Uncompressed Size     0000013F (319)\n+CA15A Filename Length       0014 (20)\n+CA15C Extra Length          0000 (0)\n+CA15E Comment Length        0000 (0)\n+CA160 Disk Start            0000 (0)\n+CA162 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9BE6 Ext File Attributes   81A40000 (2175008768)\n+CA164 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-C9BEA Local Header Offset   00000027 (39)\n-C9BEE Filename              'XXXXXXXXXXXXXXXXXXXX'\n+CA168 Local Header Offset   00000027 (39)\n+CA16C Filename              'XXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9BEE: Filename 'XXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA16C: Filename 'XXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-C9C02 CENTRAL HEADER #3     02014B50 (33639248)\n-C9C06 Created Zip Spec      14 (20) '2.0'\n-C9C07 Created OS            03 (3) 'Unix'\n-C9C08 Extract Zip Spec      0A (10) '1.0'\n-C9C09 Extract OS            00 (0) 'MS-DOS'\n-C9C0A General Purpose Flag  0800 (2048)\n+CA180 CENTRAL HEADER #3     02014B50 (33639248)\n+CA184 Created Zip Spec      14 (20) '2.0'\n+CA185 Created OS            03 (3) 'Unix'\n+CA186 Extract Zip Spec      0A (10) '1.0'\n+CA187 Extract OS            00 (0) 'MS-DOS'\n+CA188 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9C0C Compression Method    0000 (0) 'Stored'\n-C9C0E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9C12 CRC                   00000000 (0)\n-C9C16 Compressed Size       00000000 (0)\n-C9C1A Uncompressed Size     00000000 (0)\n-C9C1E Filename Length       0005 (5)\n-C9C20 Extra Length          0000 (0)\n-C9C22 Comment Length        0000 (0)\n-C9C24 Disk Start            0000 (0)\n-C9C26 Int File Attributes   0000 (0)\n+CA18A Compression Method    0000 (0) 'Stored'\n+CA18C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA190 CRC                   00000000 (0)\n+CA194 Compressed Size       00000000 (0)\n+CA198 Uncompressed Size     00000000 (0)\n+CA19C Filename Length       0005 (5)\n+CA19E Extra Length          0000 (0)\n+CA1A0 Comment Length        0000 (0)\n+CA1A2 Disk Start            0000 (0)\n+CA1A4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9C28 Ext File Attributes   41ED0010 (1106051088)\n+CA1A6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9C2C Local Header Offset   000000FE (254)\n-C9C30 Filename              'XXXXX'\n+CA1AA Local Header Offset   000000FE (254)\n+CA1AE Filename              'XXXXX'\n #\n-# WARNING: Offset 0xC9C30: Filename 'XXXXX'\n+# WARNING: Offset 0xCA1AE: Filename 'XXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9C30: Directory 'XXXXX' must end in a '/'\n+# ERROR: Offset 0xCA1AE: Directory 'XXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9C08: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXX'\n+# WARNING: Offset 0xCA186: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXX'\n #\n \n-C9C35 CENTRAL HEADER #4     02014B50 (33639248)\n-C9C39 Created Zip Spec      14 (20) '2.0'\n-C9C3A Created OS            03 (3) 'Unix'\n-C9C3B Extract Zip Spec      0A (10) '1.0'\n-C9C3C Extract OS            00 (0) 'MS-DOS'\n-C9C3D General Purpose Flag  0800 (2048)\n+CA1B3 CENTRAL HEADER #4     02014B50 (33639248)\n+CA1B7 Created Zip Spec      14 (20) '2.0'\n+CA1B8 Created OS            03 (3) 'Unix'\n+CA1B9 Extract Zip Spec      0A (10) '1.0'\n+CA1BA Extract OS            00 (0) 'MS-DOS'\n+CA1BB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9C3F Compression Method    0000 (0) 'Stored'\n-C9C41 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9C45 CRC                   00000000 (0)\n-C9C49 Compressed Size       00000000 (0)\n-C9C4D Uncompressed Size     00000000 (0)\n-C9C51 Filename Length       0015 (21)\n-C9C53 Extra Length          0000 (0)\n-C9C55 Comment Length        0000 (0)\n-C9C57 Disk Start            0000 (0)\n-C9C59 Int File Attributes   0000 (0)\n+CA1BD Compression Method    0000 (0) 'Stored'\n+CA1BF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA1C3 CRC                   00000000 (0)\n+CA1C7 Compressed Size       00000000 (0)\n+CA1CB Uncompressed Size     00000000 (0)\n+CA1CF Filename Length       0015 (21)\n+CA1D1 Extra Length          0000 (0)\n+CA1D3 Comment Length        0000 (0)\n+CA1D5 Disk Start            0000 (0)\n+CA1D7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9C5B Ext File Attributes   41ED0010 (1106051088)\n+CA1D9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9C5F Local Header Offset   00000121 (289)\n-C9C63 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+CA1DD Local Header Offset   00000121 (289)\n+CA1E1 Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9C63: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA1E1: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9C63: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA1E1: Directory 'XXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9C3B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA1B9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9C78 CENTRAL HEADER #5     02014B50 (33639248)\n-C9C7C Created Zip Spec      14 (20) '2.0'\n-C9C7D Created OS            03 (3) 'Unix'\n-C9C7E Extract Zip Spec      0A (10) '1.0'\n-C9C7F Extract OS            00 (0) 'MS-DOS'\n-C9C80 General Purpose Flag  0800 (2048)\n+CA1F6 CENTRAL HEADER #5     02014B50 (33639248)\n+CA1FA Created Zip Spec      14 (20) '2.0'\n+CA1FB Created OS            03 (3) 'Unix'\n+CA1FC Extract Zip Spec      0A (10) '1.0'\n+CA1FD Extract OS            00 (0) 'MS-DOS'\n+CA1FE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9C82 Compression Method    0000 (0) 'Stored'\n-C9C84 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9C88 CRC                   00000000 (0)\n-C9C8C Compressed Size       00000000 (0)\n-C9C90 Uncompressed Size     00000000 (0)\n-C9C94 Filename Length       0027 (39)\n-C9C96 Extra Length          0000 (0)\n-C9C98 Comment Length        0000 (0)\n-C9C9A Disk Start            0000 (0)\n-C9C9C Int File Attributes   0000 (0)\n+CA200 Compression Method    0000 (0) 'Stored'\n+CA202 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA206 CRC                   00000000 (0)\n+CA20A Compressed Size       00000000 (0)\n+CA20E Uncompressed Size     00000000 (0)\n+CA212 Filename Length       0027 (39)\n+CA214 Extra Length          0000 (0)\n+CA216 Comment Length        0000 (0)\n+CA218 Disk Start            0000 (0)\n+CA21A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9C9E Ext File Attributes   41ED0010 (1106051088)\n+CA21C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9CA2 Local Header Offset   00000154 (340)\n-C9CA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA220 Local Header Offset   00000154 (340)\n+CA224 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9CA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA224: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9CA6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA224: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9C7E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA1FC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9CCD CENTRAL HEADER #6     02014B50 (33639248)\n-C9CD1 Created Zip Spec      14 (20) '2.0'\n-C9CD2 Created OS            03 (3) 'Unix'\n-C9CD3 Extract Zip Spec      0A (10) '1.0'\n-C9CD4 Extract OS            00 (0) 'MS-DOS'\n-C9CD5 General Purpose Flag  0800 (2048)\n+CA24B CENTRAL HEADER #6     02014B50 (33639248)\n+CA24F Created Zip Spec      14 (20) '2.0'\n+CA250 Created OS            03 (3) 'Unix'\n+CA251 Extract Zip Spec      0A (10) '1.0'\n+CA252 Extract OS            00 (0) 'MS-DOS'\n+CA253 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9CD7 Compression Method    0000 (0) 'Stored'\n-C9CD9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9CDD CRC                   00000000 (0)\n-C9CE1 Compressed Size       00000000 (0)\n-C9CE5 Uncompressed Size     00000000 (0)\n-C9CE9 Filename Length       0030 (48)\n-C9CEB Extra Length          0000 (0)\n-C9CED Comment Length        0000 (0)\n-C9CEF Disk Start            0000 (0)\n-C9CF1 Int File Attributes   0000 (0)\n+CA255 Compression Method    0000 (0) 'Stored'\n+CA257 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA25B CRC                   00000000 (0)\n+CA25F Compressed Size       00000000 (0)\n+CA263 Uncompressed Size     00000000 (0)\n+CA267 Filename Length       0030 (48)\n+CA269 Extra Length          0000 (0)\n+CA26B Comment Length        0000 (0)\n+CA26D Disk Start            0000 (0)\n+CA26F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9CF3 Ext File Attributes   41ED0010 (1106051088)\n+CA271 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9CF7 Local Header Offset   00000199 (409)\n-C9CFB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA275 Local Header Offset   00000199 (409)\n+CA279 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9CFB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA279: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9CFB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA279: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9CD3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA251: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9D2B CENTRAL HEADER #7     02014B50 (33639248)\n-C9D2F Created Zip Spec      14 (20) '2.0'\n-C9D30 Created OS            03 (3) 'Unix'\n-C9D31 Extract Zip Spec      0A (10) '1.0'\n-C9D32 Extract OS            00 (0) 'MS-DOS'\n-C9D33 General Purpose Flag  0800 (2048)\n+CA2A9 CENTRAL HEADER #7     02014B50 (33639248)\n+CA2AD Created Zip Spec      14 (20) '2.0'\n+CA2AE Created OS            03 (3) 'Unix'\n+CA2AF Extract Zip Spec      0A (10) '1.0'\n+CA2B0 Extract OS            00 (0) 'MS-DOS'\n+CA2B1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9D35 Compression Method    0000 (0) 'Stored'\n-C9D37 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9D3B CRC                   00000000 (0)\n-C9D3F Compressed Size       00000000 (0)\n-C9D43 Uncompressed Size     00000000 (0)\n-C9D47 Filename Length       0067 (103)\n-C9D49 Extra Length          0000 (0)\n-C9D4B Comment Length        0000 (0)\n-C9D4D Disk Start            0000 (0)\n-C9D4F Int File Attributes   0000 (0)\n+CA2B3 Compression Method    0000 (0) 'Stored'\n+CA2B5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA2B9 CRC                   00000000 (0)\n+CA2BD Compressed Size       00000000 (0)\n+CA2C1 Uncompressed Size     00000000 (0)\n+CA2C5 Filename Length       0067 (103)\n+CA2C7 Extra Length          0000 (0)\n+CA2C9 Comment Length        0000 (0)\n+CA2CB Disk Start            0000 (0)\n+CA2CD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9D51 Ext File Attributes   41ED0010 (1106051088)\n+CA2CF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9D55 Local Header Offset   000001E7 (487)\n-C9D59 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA2D3 Local Header Offset   000001E7 (487)\n+CA2D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9D59: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA2D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9D59: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA2D7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9D31: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA2AF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9DC0 CENTRAL HEADER #8     02014B50 (33639248)\n-C9DC4 Created Zip Spec      14 (20) '2.0'\n-C9DC5 Created OS            03 (3) 'Unix'\n-C9DC6 Extract Zip Spec      0A (10) '1.0'\n-C9DC7 Extract OS            00 (0) 'MS-DOS'\n-C9DC8 General Purpose Flag  0800 (2048)\n+CA33E CENTRAL HEADER #8     02014B50 (33639248)\n+CA342 Created Zip Spec      14 (20) '2.0'\n+CA343 Created OS            03 (3) 'Unix'\n+CA344 Extract Zip Spec      0A (10) '1.0'\n+CA345 Extract OS            00 (0) 'MS-DOS'\n+CA346 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9DCA Compression Method    0000 (0) 'Stored'\n-C9DCC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9DD0 CRC                   00000000 (0)\n-C9DD4 Compressed Size       00000000 (0)\n-C9DD8 Uncompressed Size     00000000 (0)\n-C9DDC Filename Length       0023 (35)\n-C9DDE Extra Length          0000 (0)\n-C9DE0 Comment Length        0000 (0)\n-C9DE2 Disk Start            0000 (0)\n-C9DE4 Int File Attributes   0000 (0)\n+CA348 Compression Method    0000 (0) 'Stored'\n+CA34A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA34E CRC                   00000000 (0)\n+CA352 Compressed Size       00000000 (0)\n+CA356 Uncompressed Size     00000000 (0)\n+CA35A Filename Length       0023 (35)\n+CA35C Extra Length          0000 (0)\n+CA35E Comment Length        0000 (0)\n+CA360 Disk Start            0000 (0)\n+CA362 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9DE6 Ext File Attributes   41ED0010 (1106051088)\n+CA364 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9DEA Local Header Offset   0000026C (620)\n-C9DEE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA368 Local Header Offset   0000026C (620)\n+CA36C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9DEE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA36C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9DEE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA36C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9DC6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA344: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9E11 CENTRAL HEADER #9     02014B50 (33639248)\n-C9E15 Created Zip Spec      14 (20) '2.0'\n-C9E16 Created OS            03 (3) 'Unix'\n-C9E17 Extract Zip Spec      0A (10) '1.0'\n-C9E18 Extract OS            00 (0) 'MS-DOS'\n-C9E19 General Purpose Flag  0800 (2048)\n+CA38F CENTRAL HEADER #9     02014B50 (33639248)\n+CA393 Created Zip Spec      14 (20) '2.0'\n+CA394 Created OS            03 (3) 'Unix'\n+CA395 Extract Zip Spec      0A (10) '1.0'\n+CA396 Extract OS            00 (0) 'MS-DOS'\n+CA397 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9E1B Compression Method    0000 (0) 'Stored'\n-C9E1D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9E21 CRC                   00000000 (0)\n-C9E25 Compressed Size       00000000 (0)\n-C9E29 Uncompressed Size     00000000 (0)\n-C9E2D Filename Length       002C (44)\n-C9E2F Extra Length          0000 (0)\n-C9E31 Comment Length        0000 (0)\n-C9E33 Disk Start            0000 (0)\n-C9E35 Int File Attributes   0000 (0)\n+CA399 Compression Method    0000 (0) 'Stored'\n+CA39B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA39F CRC                   00000000 (0)\n+CA3A3 Compressed Size       00000000 (0)\n+CA3A7 Uncompressed Size     00000000 (0)\n+CA3AB Filename Length       002C (44)\n+CA3AD Extra Length          0000 (0)\n+CA3AF Comment Length        0000 (0)\n+CA3B1 Disk Start            0000 (0)\n+CA3B3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9E37 Ext File Attributes   41ED0010 (1106051088)\n+CA3B5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9E3B Local Header Offset   000002AD (685)\n-C9E3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA3B9 Local Header Offset   000002AD (685)\n+CA3BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9E3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA3BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9E3F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA3BD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9E17: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA395: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9E6B CENTRAL HEADER #10    02014B50 (33639248)\n-C9E6F Created Zip Spec      14 (20) '2.0'\n-C9E70 Created OS            03 (3) 'Unix'\n-C9E71 Extract Zip Spec      0A (10) '1.0'\n-C9E72 Extract OS            00 (0) 'MS-DOS'\n-C9E73 General Purpose Flag  0800 (2048)\n+CA3E9 CENTRAL HEADER #10    02014B50 (33639248)\n+CA3ED Created Zip Spec      14 (20) '2.0'\n+CA3EE Created OS            03 (3) 'Unix'\n+CA3EF Extract Zip Spec      0A (10) '1.0'\n+CA3F0 Extract OS            00 (0) 'MS-DOS'\n+CA3F1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9E75 Compression Method    0000 (0) 'Stored'\n-C9E77 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9E7B CRC                   00000000 (0)\n-C9E7F Compressed Size       00000000 (0)\n-C9E83 Uncompressed Size     00000000 (0)\n-C9E87 Filename Length       0058 (88)\n-C9E89 Extra Length          0000 (0)\n-C9E8B Comment Length        0000 (0)\n-C9E8D Disk Start            0000 (0)\n-C9E8F Int File Attributes   0000 (0)\n+CA3F3 Compression Method    0000 (0) 'Stored'\n+CA3F5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA3F9 CRC                   00000000 (0)\n+CA3FD Compressed Size       00000000 (0)\n+CA401 Uncompressed Size     00000000 (0)\n+CA405 Filename Length       0058 (88)\n+CA407 Extra Length          0000 (0)\n+CA409 Comment Length        0000 (0)\n+CA40B Disk Start            0000 (0)\n+CA40D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9E91 Ext File Attributes   41ED0010 (1106051088)\n+CA40F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9E95 Local Header Offset   000002F7 (759)\n-C9E99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA413 Local Header Offset   000002F7 (759)\n+CA417 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9E99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA417: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9E99: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA417: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9E71: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA3EF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9EF1 CENTRAL HEADER #11    02014B50 (33639248)\n-C9EF5 Created Zip Spec      14 (20) '2.0'\n-C9EF6 Created OS            03 (3) 'Unix'\n-C9EF7 Extract Zip Spec      0A (10) '1.0'\n-C9EF8 Extract OS            00 (0) 'MS-DOS'\n-C9EF9 General Purpose Flag  0800 (2048)\n+CA46F CENTRAL HEADER #11    02014B50 (33639248)\n+CA473 Created Zip Spec      14 (20) '2.0'\n+CA474 Created OS            03 (3) 'Unix'\n+CA475 Extract Zip Spec      0A (10) '1.0'\n+CA476 Extract OS            00 (0) 'MS-DOS'\n+CA477 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9EFB Compression Method    0000 (0) 'Stored'\n-C9EFD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9F01 CRC                   00000000 (0)\n-C9F05 Compressed Size       00000000 (0)\n-C9F09 Uncompressed Size     00000000 (0)\n-C9F0D Filename Length       0058 (88)\n-C9F0F Extra Length          0000 (0)\n-C9F11 Comment Length        0000 (0)\n-C9F13 Disk Start            0000 (0)\n-C9F15 Int File Attributes   0000 (0)\n+CA479 Compression Method    0000 (0) 'Stored'\n+CA47B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA47F CRC                   00000000 (0)\n+CA483 Compressed Size       00000000 (0)\n+CA487 Uncompressed Size     00000000 (0)\n+CA48B Filename Length       0058 (88)\n+CA48D Extra Length          0000 (0)\n+CA48F Comment Length        0000 (0)\n+CA491 Disk Start            0000 (0)\n+CA493 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9F17 Ext File Attributes   41ED0010 (1106051088)\n+CA495 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9F1B Local Header Offset   0000036D (877)\n-C9F1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA499 Local Header Offset   0000036D (877)\n+CA49D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9F1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA49D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9F1F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA49D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9EF7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA475: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9F77 CENTRAL HEADER #12    02014B50 (33639248)\n-C9F7B Created Zip Spec      14 (20) '2.0'\n-C9F7C Created OS            03 (3) 'Unix'\n-C9F7D Extract Zip Spec      0A (10) '1.0'\n-C9F7E Extract OS            00 (0) 'MS-DOS'\n-C9F7F General Purpose Flag  0800 (2048)\n+CA4F5 CENTRAL HEADER #12    02014B50 (33639248)\n+CA4F9 Created Zip Spec      14 (20) '2.0'\n+CA4FA Created OS            03 (3) 'Unix'\n+CA4FB Extract Zip Spec      0A (10) '1.0'\n+CA4FC Extract OS            00 (0) 'MS-DOS'\n+CA4FD General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9F81 Compression Method    0000 (0) 'Stored'\n-C9F83 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9F87 CRC                   00000000 (0)\n-C9F8B Compressed Size       00000000 (0)\n-C9F8F Uncompressed Size     00000000 (0)\n-C9F93 Filename Length       002F (47)\n-C9F95 Extra Length          0000 (0)\n-C9F97 Comment Length        0000 (0)\n-C9F99 Disk Start            0000 (0)\n-C9F9B Int File Attributes   0000 (0)\n+CA4FF Compression Method    0000 (0) 'Stored'\n+CA501 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA505 CRC                   00000000 (0)\n+CA509 Compressed Size       00000000 (0)\n+CA50D Uncompressed Size     00000000 (0)\n+CA511 Filename Length       002F (47)\n+CA513 Extra Length          0000 (0)\n+CA515 Comment Length        0000 (0)\n+CA517 Disk Start            0000 (0)\n+CA519 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9F9D Ext File Attributes   41ED0010 (1106051088)\n+CA51B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9FA1 Local Header Offset   000003E3 (995)\n-C9FA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA51F Local Header Offset   000003E3 (995)\n+CA523 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xC9FA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA523: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xC9FA5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA523: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9F7D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA4FB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-C9FD4 CENTRAL HEADER #13    02014B50 (33639248)\n-C9FD8 Created Zip Spec      14 (20) '2.0'\n-C9FD9 Created OS            03 (3) 'Unix'\n-C9FDA Extract Zip Spec      0A (10) '1.0'\n-C9FDB Extract OS            00 (0) 'MS-DOS'\n-C9FDC General Purpose Flag  0800 (2048)\n+CA552 CENTRAL HEADER #13    02014B50 (33639248)\n+CA556 Created Zip Spec      14 (20) '2.0'\n+CA557 Created OS            03 (3) 'Unix'\n+CA558 Extract Zip Spec      0A (10) '1.0'\n+CA559 Extract OS            00 (0) 'MS-DOS'\n+CA55A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-C9FDE Compression Method    0000 (0) 'Stored'\n-C9FE0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-C9FE4 CRC                   00000000 (0)\n-C9FE8 Compressed Size       00000000 (0)\n-C9FEC Uncompressed Size     00000000 (0)\n-C9FF0 Filename Length       0038 (56)\n-C9FF2 Extra Length          0000 (0)\n-C9FF4 Comment Length        0000 (0)\n-C9FF6 Disk Start            0000 (0)\n-C9FF8 Int File Attributes   0000 (0)\n+CA55C Compression Method    0000 (0) 'Stored'\n+CA55E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA562 CRC                   00000000 (0)\n+CA566 Compressed Size       00000000 (0)\n+CA56A Uncompressed Size     00000000 (0)\n+CA56E Filename Length       0038 (56)\n+CA570 Extra Length          0000 (0)\n+CA572 Comment Length        0000 (0)\n+CA574 Disk Start            0000 (0)\n+CA576 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-C9FFA Ext File Attributes   41ED0010 (1106051088)\n+CA578 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-C9FFE Local Header Offset   00000430 (1072)\n-CA002 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA57C Local Header Offset   00000430 (1072)\n+CA580 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA002: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA580: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA002: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA580: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xC9FDA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA558: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA03A CENTRAL HEADER #14    02014B50 (33639248)\n-CA03E Created Zip Spec      14 (20) '2.0'\n-CA03F Created OS            03 (3) 'Unix'\n-CA040 Extract Zip Spec      0A (10) '1.0'\n-CA041 Extract OS            00 (0) 'MS-DOS'\n-CA042 General Purpose Flag  0800 (2048)\n+CA5B8 CENTRAL HEADER #14    02014B50 (33639248)\n+CA5BC Created Zip Spec      14 (20) '2.0'\n+CA5BD Created OS            03 (3) 'Unix'\n+CA5BE Extract Zip Spec      0A (10) '1.0'\n+CA5BF Extract OS            00 (0) 'MS-DOS'\n+CA5C0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA044 Compression Method    0000 (0) 'Stored'\n-CA046 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA04A CRC                   00000000 (0)\n-CA04E Compressed Size       00000000 (0)\n-CA052 Uncompressed Size     00000000 (0)\n-CA056 Filename Length       0068 (104)\n-CA058 Extra Length          0000 (0)\n-CA05A Comment Length        0000 (0)\n-CA05C Disk Start            0000 (0)\n-CA05E Int File Attributes   0000 (0)\n+CA5C2 Compression Method    0000 (0) 'Stored'\n+CA5C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA5C8 CRC                   00000000 (0)\n+CA5CC Compressed Size       00000000 (0)\n+CA5D0 Uncompressed Size     00000000 (0)\n+CA5D4 Filename Length       0068 (104)\n+CA5D6 Extra Length          0000 (0)\n+CA5D8 Comment Length        0000 (0)\n+CA5DA Disk Start            0000 (0)\n+CA5DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA060 Ext File Attributes   41ED0010 (1106051088)\n+CA5DE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA064 Local Header Offset   00000486 (1158)\n-CA068 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA5E2 Local Header Offset   00000486 (1158)\n+CA5E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA068: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA5E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA068: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA5E6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA040: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA5BE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA0D0 CENTRAL HEADER #15    02014B50 (33639248)\n-CA0D4 Created Zip Spec      14 (20) '2.0'\n-CA0D5 Created OS            03 (3) 'Unix'\n-CA0D6 Extract Zip Spec      0A (10) '1.0'\n-CA0D7 Extract OS            00 (0) 'MS-DOS'\n-CA0D8 General Purpose Flag  0800 (2048)\n+CA64E CENTRAL HEADER #15    02014B50 (33639248)\n+CA652 Created Zip Spec      14 (20) '2.0'\n+CA653 Created OS            03 (3) 'Unix'\n+CA654 Extract Zip Spec      0A (10) '1.0'\n+CA655 Extract OS            00 (0) 'MS-DOS'\n+CA656 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA0DA Compression Method    0000 (0) 'Stored'\n-CA0DC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA0E0 CRC                   00000000 (0)\n-CA0E4 Compressed Size       00000000 (0)\n-CA0E8 Uncompressed Size     00000000 (0)\n-CA0EC Filename Length       0022 (34)\n-CA0EE Extra Length          0000 (0)\n-CA0F0 Comment Length        0000 (0)\n-CA0F2 Disk Start            0000 (0)\n-CA0F4 Int File Attributes   0000 (0)\n+CA658 Compression Method    0000 (0) 'Stored'\n+CA65A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA65E CRC                   00000000 (0)\n+CA662 Compressed Size       00000000 (0)\n+CA666 Uncompressed Size     00000000 (0)\n+CA66A Filename Length       0022 (34)\n+CA66C Extra Length          0000 (0)\n+CA66E Comment Length        0000 (0)\n+CA670 Disk Start            0000 (0)\n+CA672 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA0F6 Ext File Attributes   41ED0010 (1106051088)\n+CA674 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA0FA Local Header Offset   0000050C (1292)\n-CA0FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA678 Local Header Offset   0000050C (1292)\n+CA67C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA0FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA67C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA0FE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA67C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA0D6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA654: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA120 CENTRAL HEADER #16    02014B50 (33639248)\n-CA124 Created Zip Spec      14 (20) '2.0'\n-CA125 Created OS            03 (3) 'Unix'\n-CA126 Extract Zip Spec      0A (10) '1.0'\n-CA127 Extract OS            00 (0) 'MS-DOS'\n-CA128 General Purpose Flag  0800 (2048)\n+CA69E CENTRAL HEADER #16    02014B50 (33639248)\n+CA6A2 Created Zip Spec      14 (20) '2.0'\n+CA6A3 Created OS            03 (3) 'Unix'\n+CA6A4 Extract Zip Spec      0A (10) '1.0'\n+CA6A5 Extract OS            00 (0) 'MS-DOS'\n+CA6A6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA12A Compression Method    0000 (0) 'Stored'\n-CA12C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA130 CRC                   00000000 (0)\n-CA134 Compressed Size       00000000 (0)\n-CA138 Uncompressed Size     00000000 (0)\n-CA13C Filename Length       002B (43)\n-CA13E Extra Length          0000 (0)\n-CA140 Comment Length        0000 (0)\n-CA142 Disk Start            0000 (0)\n-CA144 Int File Attributes   0000 (0)\n+CA6A8 Compression Method    0000 (0) 'Stored'\n+CA6AA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA6AE CRC                   00000000 (0)\n+CA6B2 Compressed Size       00000000 (0)\n+CA6B6 Uncompressed Size     00000000 (0)\n+CA6BA Filename Length       002B (43)\n+CA6BC Extra Length          0000 (0)\n+CA6BE Comment Length        0000 (0)\n+CA6C0 Disk Start            0000 (0)\n+CA6C2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA146 Ext File Attributes   41ED0010 (1106051088)\n+CA6C4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA14A Local Header Offset   0000054C (1356)\n-CA14E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA6C8 Local Header Offset   0000054C (1356)\n+CA6CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA14E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA6CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA14E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA6CC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA126: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA6A4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA179 CENTRAL HEADER #17    02014B50 (33639248)\n-CA17D Created Zip Spec      14 (20) '2.0'\n-CA17E Created OS            03 (3) 'Unix'\n-CA17F Extract Zip Spec      0A (10) '1.0'\n-CA180 Extract OS            00 (0) 'MS-DOS'\n-CA181 General Purpose Flag  0800 (2048)\n+CA6F7 CENTRAL HEADER #17    02014B50 (33639248)\n+CA6FB Created Zip Spec      14 (20) '2.0'\n+CA6FC Created OS            03 (3) 'Unix'\n+CA6FD Extract Zip Spec      0A (10) '1.0'\n+CA6FE Extract OS            00 (0) 'MS-DOS'\n+CA6FF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA183 Compression Method    0000 (0) 'Stored'\n-CA185 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA189 CRC                   00000000 (0)\n-CA18D Compressed Size       00000000 (0)\n-CA191 Uncompressed Size     00000000 (0)\n-CA195 Filename Length       006C (108)\n-CA197 Extra Length          0000 (0)\n-CA199 Comment Length        0000 (0)\n-CA19B Disk Start            0000 (0)\n-CA19D Int File Attributes   0000 (0)\n+CA701 Compression Method    0000 (0) 'Stored'\n+CA703 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA707 CRC                   00000000 (0)\n+CA70B Compressed Size       00000000 (0)\n+CA70F Uncompressed Size     00000000 (0)\n+CA713 Filename Length       006C (108)\n+CA715 Extra Length          0000 (0)\n+CA717 Comment Length        0000 (0)\n+CA719 Disk Start            0000 (0)\n+CA71B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA19F Ext File Attributes   41ED0010 (1106051088)\n+CA71D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA1A3 Local Header Offset   00000595 (1429)\n-CA1A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA721 Local Header Offset   00000595 (1429)\n+CA725 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA1A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA725: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA1A7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA725: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA17F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA6FD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA213 CENTRAL HEADER #18    02014B50 (33639248)\n-CA217 Created Zip Spec      14 (20) '2.0'\n-CA218 Created OS            03 (3) 'Unix'\n-CA219 Extract Zip Spec      0A (10) '1.0'\n-CA21A Extract OS            00 (0) 'MS-DOS'\n-CA21B General Purpose Flag  0800 (2048)\n+CA791 CENTRAL HEADER #18    02014B50 (33639248)\n+CA795 Created Zip Spec      14 (20) '2.0'\n+CA796 Created OS            03 (3) 'Unix'\n+CA797 Extract Zip Spec      0A (10) '1.0'\n+CA798 Extract OS            00 (0) 'MS-DOS'\n+CA799 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA21D Compression Method    0000 (0) 'Stored'\n-CA21F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA223 CRC                   00000000 (0)\n-CA227 Compressed Size       00000000 (0)\n-CA22B Uncompressed Size     00000000 (0)\n-CA22F Filename Length       0065 (101)\n-CA231 Extra Length          0000 (0)\n-CA233 Comment Length        0000 (0)\n-CA235 Disk Start            0000 (0)\n-CA237 Int File Attributes   0000 (0)\n+CA79B Compression Method    0000 (0) 'Stored'\n+CA79D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA7A1 CRC                   00000000 (0)\n+CA7A5 Compressed Size       00000000 (0)\n+CA7A9 Uncompressed Size     00000000 (0)\n+CA7AD Filename Length       0065 (101)\n+CA7AF Extra Length          0000 (0)\n+CA7B1 Comment Length        0000 (0)\n+CA7B3 Disk Start            0000 (0)\n+CA7B5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA239 Ext File Attributes   41ED0010 (1106051088)\n+CA7B7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA23D Local Header Offset   0000061F (1567)\n-CA241 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA7BB Local Header Offset   0000061F (1567)\n+CA7BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA241: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA7BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA241: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA7BF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA219: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA797: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA2A6 CENTRAL HEADER #19    02014B50 (33639248)\n-CA2AA Created Zip Spec      14 (20) '2.0'\n-CA2AB Created OS            03 (3) 'Unix'\n-CA2AC Extract Zip Spec      0A (10) '1.0'\n-CA2AD Extract OS            00 (0) 'MS-DOS'\n-CA2AE General Purpose Flag  0800 (2048)\n+CA824 CENTRAL HEADER #19    02014B50 (33639248)\n+CA828 Created Zip Spec      14 (20) '2.0'\n+CA829 Created OS            03 (3) 'Unix'\n+CA82A Extract Zip Spec      0A (10) '1.0'\n+CA82B Extract OS            00 (0) 'MS-DOS'\n+CA82C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA2B0 Compression Method    0000 (0) 'Stored'\n-CA2B2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA2B6 CRC                   00000000 (0)\n-CA2BA Compressed Size       00000000 (0)\n-CA2BE Uncompressed Size     00000000 (0)\n-CA2C2 Filename Length       006E (110)\n-CA2C4 Extra Length          0000 (0)\n-CA2C6 Comment Length        0000 (0)\n-CA2C8 Disk Start            0000 (0)\n-CA2CA Int File Attributes   0000 (0)\n+CA82E Compression Method    0000 (0) 'Stored'\n+CA830 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA834 CRC                   00000000 (0)\n+CA838 Compressed Size       00000000 (0)\n+CA83C Uncompressed Size     00000000 (0)\n+CA840 Filename Length       006E (110)\n+CA842 Extra Length          0000 (0)\n+CA844 Comment Length        0000 (0)\n+CA846 Disk Start            0000 (0)\n+CA848 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA2CC Ext File Attributes   41ED0010 (1106051088)\n+CA84A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA2D0 Local Header Offset   000006A2 (1698)\n-CA2D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA84E Local Header Offset   000006A2 (1698)\n+CA852 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA2D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA852: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA2D4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA852: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA2AC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA82A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA342 CENTRAL HEADER #20    02014B50 (33639248)\n-CA346 Created Zip Spec      14 (20) '2.0'\n-CA347 Created OS            03 (3) 'Unix'\n-CA348 Extract Zip Spec      0A (10) '1.0'\n-CA349 Extract OS            00 (0) 'MS-DOS'\n-CA34A General Purpose Flag  0800 (2048)\n+CA8C0 CENTRAL HEADER #20    02014B50 (33639248)\n+CA8C4 Created Zip Spec      14 (20) '2.0'\n+CA8C5 Created OS            03 (3) 'Unix'\n+CA8C6 Extract Zip Spec      0A (10) '1.0'\n+CA8C7 Extract OS            00 (0) 'MS-DOS'\n+CA8C8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA34C Compression Method    0000 (0) 'Stored'\n-CA34E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA352 CRC                   00000000 (0)\n-CA356 Compressed Size       00000000 (0)\n-CA35A Uncompressed Size     00000000 (0)\n-CA35E Filename Length       0068 (104)\n-CA360 Extra Length          0000 (0)\n-CA362 Comment Length        0000 (0)\n-CA364 Disk Start            0000 (0)\n-CA366 Int File Attributes   0000 (0)\n+CA8CA Compression Method    0000 (0) 'Stored'\n+CA8CC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA8D0 CRC                   00000000 (0)\n+CA8D4 Compressed Size       00000000 (0)\n+CA8D8 Uncompressed Size     00000000 (0)\n+CA8DC Filename Length       0068 (104)\n+CA8DE Extra Length          0000 (0)\n+CA8E0 Comment Length        0000 (0)\n+CA8E2 Disk Start            0000 (0)\n+CA8E4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA368 Ext File Attributes   41ED0010 (1106051088)\n+CA8E6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA36C Local Header Offset   0000072E (1838)\n-CA370 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA8EA Local Header Offset   0000072E (1838)\n+CA8EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA370: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA8EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA370: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA8EE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA348: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA8C6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA3D8 CENTRAL HEADER #21    02014B50 (33639248)\n-CA3DC Created Zip Spec      14 (20) '2.0'\n-CA3DD Created OS            03 (3) 'Unix'\n-CA3DE Extract Zip Spec      0A (10) '1.0'\n-CA3DF Extract OS            00 (0) 'MS-DOS'\n-CA3E0 General Purpose Flag  0800 (2048)\n+CA956 CENTRAL HEADER #21    02014B50 (33639248)\n+CA95A Created Zip Spec      14 (20) '2.0'\n+CA95B Created OS            03 (3) 'Unix'\n+CA95C Extract Zip Spec      0A (10) '1.0'\n+CA95D Extract OS            00 (0) 'MS-DOS'\n+CA95E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA3E2 Compression Method    0000 (0) 'Stored'\n-CA3E4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA3E8 CRC                   00000000 (0)\n-CA3EC Compressed Size       00000000 (0)\n-CA3F0 Uncompressed Size     00000000 (0)\n-CA3F4 Filename Length       0064 (100)\n-CA3F6 Extra Length          0000 (0)\n-CA3F8 Comment Length        0000 (0)\n-CA3FA Disk Start            0000 (0)\n-CA3FC Int File Attributes   0000 (0)\n+CA960 Compression Method    0000 (0) 'Stored'\n+CA962 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA966 CRC                   00000000 (0)\n+CA96A Compressed Size       00000000 (0)\n+CA96E Uncompressed Size     00000000 (0)\n+CA972 Filename Length       0064 (100)\n+CA974 Extra Length          0000 (0)\n+CA976 Comment Length        0000 (0)\n+CA978 Disk Start            0000 (0)\n+CA97A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA3FE Ext File Attributes   41ED0010 (1106051088)\n+CA97C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA402 Local Header Offset   000007B4 (1972)\n-CA406 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CA980 Local Header Offset   000007B4 (1972)\n+CA984 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA406: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA984: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA406: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCA984: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA3DE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA95C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA46A CENTRAL HEADER #22    02014B50 (33639248)\n-CA46E Created Zip Spec      14 (20) '2.0'\n-CA46F Created OS            03 (3) 'Unix'\n-CA470 Extract Zip Spec      0A (10) '1.0'\n-CA471 Extract OS            00 (0) 'MS-DOS'\n-CA472 General Purpose Flag  0800 (2048)\n+CA9E8 CENTRAL HEADER #22    02014B50 (33639248)\n+CA9EC Created Zip Spec      14 (20) '2.0'\n+CA9ED Created OS            03 (3) 'Unix'\n+CA9EE Extract Zip Spec      0A (10) '1.0'\n+CA9EF Extract OS            00 (0) 'MS-DOS'\n+CA9F0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA474 Compression Method    0000 (0) 'Stored'\n-CA476 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA47A CRC                   00000000 (0)\n-CA47E Compressed Size       00000000 (0)\n-CA482 Uncompressed Size     00000000 (0)\n-CA486 Filename Length       006E (110)\n-CA488 Extra Length          0000 (0)\n-CA48A Comment Length        0000 (0)\n-CA48C Disk Start            0000 (0)\n-CA48E Int File Attributes   0000 (0)\n+CA9F2 Compression Method    0000 (0) 'Stored'\n+CA9F4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CA9F8 CRC                   00000000 (0)\n+CA9FC Compressed Size       00000000 (0)\n+CAA00 Uncompressed Size     00000000 (0)\n+CAA04 Filename Length       006E (110)\n+CAA06 Extra Length          0000 (0)\n+CAA08 Comment Length        0000 (0)\n+CAA0A Disk Start            0000 (0)\n+CAA0C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA490 Ext File Attributes   41ED0010 (1106051088)\n+CAA0E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA494 Local Header Offset   00000836 (2102)\n-CA498 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAA12 Local Header Offset   00000836 (2102)\n+CAA16 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA498: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAA16: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA498: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAA16: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA470: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCA9EE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA506 CENTRAL HEADER #23    02014B50 (33639248)\n-CA50A Created Zip Spec      14 (20) '2.0'\n-CA50B Created OS            03 (3) 'Unix'\n-CA50C Extract Zip Spec      0A (10) '1.0'\n-CA50D Extract OS            00 (0) 'MS-DOS'\n-CA50E General Purpose Flag  0800 (2048)\n+CAA84 CENTRAL HEADER #23    02014B50 (33639248)\n+CAA88 Created Zip Spec      14 (20) '2.0'\n+CAA89 Created OS            03 (3) 'Unix'\n+CAA8A Extract Zip Spec      0A (10) '1.0'\n+CAA8B Extract OS            00 (0) 'MS-DOS'\n+CAA8C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA510 Compression Method    0000 (0) 'Stored'\n-CA512 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA516 CRC                   00000000 (0)\n-CA51A Compressed Size       00000000 (0)\n-CA51E Uncompressed Size     00000000 (0)\n-CA522 Filename Length       006A (106)\n-CA524 Extra Length          0000 (0)\n-CA526 Comment Length        0000 (0)\n-CA528 Disk Start            0000 (0)\n-CA52A Int File Attributes   0000 (0)\n+CAA8E Compression Method    0000 (0) 'Stored'\n+CAA90 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAA94 CRC                   00000000 (0)\n+CAA98 Compressed Size       00000000 (0)\n+CAA9C Uncompressed Size     00000000 (0)\n+CAAA0 Filename Length       006A (106)\n+CAAA2 Extra Length          0000 (0)\n+CAAA4 Comment Length        0000 (0)\n+CAAA6 Disk Start            0000 (0)\n+CAAA8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA52C Ext File Attributes   41ED0010 (1106051088)\n+CAAAA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA530 Local Header Offset   000008C2 (2242)\n-CA534 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAAAE Local Header Offset   000008C2 (2242)\n+CAAB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA534: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAAB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA534: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAAB2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA50C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAA8A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA59E CENTRAL HEADER #24    02014B50 (33639248)\n-CA5A2 Created Zip Spec      14 (20) '2.0'\n-CA5A3 Created OS            03 (3) 'Unix'\n-CA5A4 Extract Zip Spec      0A (10) '1.0'\n-CA5A5 Extract OS            00 (0) 'MS-DOS'\n-CA5A6 General Purpose Flag  0800 (2048)\n+CAB1C CENTRAL HEADER #24    02014B50 (33639248)\n+CAB20 Created Zip Spec      14 (20) '2.0'\n+CAB21 Created OS            03 (3) 'Unix'\n+CAB22 Extract Zip Spec      0A (10) '1.0'\n+CAB23 Extract OS            00 (0) 'MS-DOS'\n+CAB24 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA5A8 Compression Method    0000 (0) 'Stored'\n-CA5AA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA5AE CRC                   00000000 (0)\n-CA5B2 Compressed Size       00000000 (0)\n-CA5B6 Uncompressed Size     00000000 (0)\n-CA5BA Filename Length       0072 (114)\n-CA5BC Extra Length          0000 (0)\n-CA5BE Comment Length        0000 (0)\n-CA5C0 Disk Start            0000 (0)\n-CA5C2 Int File Attributes   0000 (0)\n+CAB26 Compression Method    0000 (0) 'Stored'\n+CAB28 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAB2C CRC                   00000000 (0)\n+CAB30 Compressed Size       00000000 (0)\n+CAB34 Uncompressed Size     00000000 (0)\n+CAB38 Filename Length       0072 (114)\n+CAB3A Extra Length          0000 (0)\n+CAB3C Comment Length        0000 (0)\n+CAB3E Disk Start            0000 (0)\n+CAB40 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA5C4 Ext File Attributes   41ED0010 (1106051088)\n+CAB42 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA5C8 Local Header Offset   0000094A (2378)\n-CA5CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAB46 Local Header Offset   0000094A (2378)\n+CAB4A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA5CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAB4A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA5CC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAB4A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA5A4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAB22: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA63E CENTRAL HEADER #25    02014B50 (33639248)\n-CA642 Created Zip Spec      14 (20) '2.0'\n-CA643 Created OS            03 (3) 'Unix'\n-CA644 Extract Zip Spec      0A (10) '1.0'\n-CA645 Extract OS            00 (0) 'MS-DOS'\n-CA646 General Purpose Flag  0800 (2048)\n+CABBC CENTRAL HEADER #25    02014B50 (33639248)\n+CABC0 Created Zip Spec      14 (20) '2.0'\n+CABC1 Created OS            03 (3) 'Unix'\n+CABC2 Extract Zip Spec      0A (10) '1.0'\n+CABC3 Extract OS            00 (0) 'MS-DOS'\n+CABC4 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA648 Compression Method    0000 (0) 'Stored'\n-CA64A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA64E CRC                   00000000 (0)\n-CA652 Compressed Size       00000000 (0)\n-CA656 Uncompressed Size     00000000 (0)\n-CA65A Filename Length       006E (110)\n-CA65C Extra Length          0000 (0)\n-CA65E Comment Length        0000 (0)\n-CA660 Disk Start            0000 (0)\n-CA662 Int File Attributes   0000 (0)\n+CABC6 Compression Method    0000 (0) 'Stored'\n+CABC8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CABCC CRC                   00000000 (0)\n+CABD0 Compressed Size       00000000 (0)\n+CABD4 Uncompressed Size     00000000 (0)\n+CABD8 Filename Length       006E (110)\n+CABDA Extra Length          0000 (0)\n+CABDC Comment Length        0000 (0)\n+CABDE Disk Start            0000 (0)\n+CABE0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA664 Ext File Attributes   41ED0010 (1106051088)\n+CABE2 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA668 Local Header Offset   000009DA (2522)\n-CA66C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CABE6 Local Header Offset   000009DA (2522)\n+CABEA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA66C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCABEA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA66C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCABEA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA644: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCABC2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA6DA CENTRAL HEADER #26    02014B50 (33639248)\n-CA6DE Created Zip Spec      14 (20) '2.0'\n-CA6DF Created OS            03 (3) 'Unix'\n-CA6E0 Extract Zip Spec      0A (10) '1.0'\n-CA6E1 Extract OS            00 (0) 'MS-DOS'\n-CA6E2 General Purpose Flag  0800 (2048)\n+CAC58 CENTRAL HEADER #26    02014B50 (33639248)\n+CAC5C Created Zip Spec      14 (20) '2.0'\n+CAC5D Created OS            03 (3) 'Unix'\n+CAC5E Extract Zip Spec      0A (10) '1.0'\n+CAC5F Extract OS            00 (0) 'MS-DOS'\n+CAC60 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA6E4 Compression Method    0000 (0) 'Stored'\n-CA6E6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA6EA CRC                   00000000 (0)\n-CA6EE Compressed Size       00000000 (0)\n-CA6F2 Uncompressed Size     00000000 (0)\n-CA6F6 Filename Length       0070 (112)\n-CA6F8 Extra Length          0000 (0)\n-CA6FA Comment Length        0000 (0)\n-CA6FC Disk Start            0000 (0)\n-CA6FE Int File Attributes   0000 (0)\n+CAC62 Compression Method    0000 (0) 'Stored'\n+CAC64 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAC68 CRC                   00000000 (0)\n+CAC6C Compressed Size       00000000 (0)\n+CAC70 Uncompressed Size     00000000 (0)\n+CAC74 Filename Length       0070 (112)\n+CAC76 Extra Length          0000 (0)\n+CAC78 Comment Length        0000 (0)\n+CAC7A Disk Start            0000 (0)\n+CAC7C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA700 Ext File Attributes   41ED0010 (1106051088)\n+CAC7E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA704 Local Header Offset   00000A66 (2662)\n-CA708 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAC82 Local Header Offset   00000A66 (2662)\n+CAC86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA708: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAC86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA708: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAC86: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA6E0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAC5E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA778 CENTRAL HEADER #27    02014B50 (33639248)\n-CA77C Created Zip Spec      14 (20) '2.0'\n-CA77D Created OS            03 (3) 'Unix'\n-CA77E Extract Zip Spec      0A (10) '1.0'\n-CA77F Extract OS            00 (0) 'MS-DOS'\n-CA780 General Purpose Flag  0800 (2048)\n+CACF6 CENTRAL HEADER #27    02014B50 (33639248)\n+CACFA Created Zip Spec      14 (20) '2.0'\n+CACFB Created OS            03 (3) 'Unix'\n+CACFC Extract Zip Spec      0A (10) '1.0'\n+CACFD Extract OS            00 (0) 'MS-DOS'\n+CACFE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA782 Compression Method    0000 (0) 'Stored'\n-CA784 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA788 CRC                   00000000 (0)\n-CA78C Compressed Size       00000000 (0)\n-CA790 Uncompressed Size     00000000 (0)\n-CA794 Filename Length       006C (108)\n-CA796 Extra Length          0000 (0)\n-CA798 Comment Length        0000 (0)\n-CA79A Disk Start            0000 (0)\n-CA79C Int File Attributes   0000 (0)\n+CAD00 Compression Method    0000 (0) 'Stored'\n+CAD02 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAD06 CRC                   00000000 (0)\n+CAD0A Compressed Size       00000000 (0)\n+CAD0E Uncompressed Size     00000000 (0)\n+CAD12 Filename Length       006C (108)\n+CAD14 Extra Length          0000 (0)\n+CAD16 Comment Length        0000 (0)\n+CAD18 Disk Start            0000 (0)\n+CAD1A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA79E Ext File Attributes   41ED0010 (1106051088)\n+CAD1C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA7A2 Local Header Offset   00000AF4 (2804)\n-CA7A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAD20 Local Header Offset   00000AF4 (2804)\n+CAD24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA7A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAD24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA7A6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAD24: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA77E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCACFC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA812 CENTRAL HEADER #28    02014B50 (33639248)\n-CA816 Created Zip Spec      14 (20) '2.0'\n-CA817 Created OS            03 (3) 'Unix'\n-CA818 Extract Zip Spec      0A (10) '1.0'\n-CA819 Extract OS            00 (0) 'MS-DOS'\n-CA81A General Purpose Flag  0800 (2048)\n+CAD90 CENTRAL HEADER #28    02014B50 (33639248)\n+CAD94 Created Zip Spec      14 (20) '2.0'\n+CAD95 Created OS            03 (3) 'Unix'\n+CAD96 Extract Zip Spec      0A (10) '1.0'\n+CAD97 Extract OS            00 (0) 'MS-DOS'\n+CAD98 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA81C Compression Method    0000 (0) 'Stored'\n-CA81E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA822 CRC                   00000000 (0)\n-CA826 Compressed Size       00000000 (0)\n-CA82A Uncompressed Size     00000000 (0)\n-CA82E Filename Length       0054 (84)\n-CA830 Extra Length          0000 (0)\n-CA832 Comment Length        0000 (0)\n-CA834 Disk Start            0000 (0)\n-CA836 Int File Attributes   0000 (0)\n+CAD9A Compression Method    0000 (0) 'Stored'\n+CAD9C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CADA0 CRC                   00000000 (0)\n+CADA4 Compressed Size       00000000 (0)\n+CADA8 Uncompressed Size     00000000 (0)\n+CADAC Filename Length       0054 (84)\n+CADAE Extra Length          0000 (0)\n+CADB0 Comment Length        0000 (0)\n+CADB2 Disk Start            0000 (0)\n+CADB4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA838 Ext File Attributes   41ED0010 (1106051088)\n+CADB6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA83C Local Header Offset   00000B7E (2942)\n-CA840 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CADBA Local Header Offset   00000B7E (2942)\n+CADBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA840: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCADBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA840: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCADBE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA818: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAD96: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA894 CENTRAL HEADER #29    02014B50 (33639248)\n-CA898 Created Zip Spec      14 (20) '2.0'\n-CA899 Created OS            03 (3) 'Unix'\n-CA89A Extract Zip Spec      0A (10) '1.0'\n-CA89B Extract OS            00 (0) 'MS-DOS'\n-CA89C General Purpose Flag  0800 (2048)\n+CAE12 CENTRAL HEADER #29    02014B50 (33639248)\n+CAE16 Created Zip Spec      14 (20) '2.0'\n+CAE17 Created OS            03 (3) 'Unix'\n+CAE18 Extract Zip Spec      0A (10) '1.0'\n+CAE19 Extract OS            00 (0) 'MS-DOS'\n+CAE1A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA89E Compression Method    0000 (0) 'Stored'\n-CA8A0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA8A4 CRC                   00000000 (0)\n-CA8A8 Compressed Size       00000000 (0)\n-CA8AC Uncompressed Size     00000000 (0)\n-CA8B0 Filename Length       0059 (89)\n-CA8B2 Extra Length          0000 (0)\n-CA8B4 Comment Length        0000 (0)\n-CA8B6 Disk Start            0000 (0)\n-CA8B8 Int File Attributes   0000 (0)\n+CAE1C Compression Method    0000 (0) 'Stored'\n+CAE1E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAE22 CRC                   00000000 (0)\n+CAE26 Compressed Size       00000000 (0)\n+CAE2A Uncompressed Size     00000000 (0)\n+CAE2E Filename Length       0059 (89)\n+CAE30 Extra Length          0000 (0)\n+CAE32 Comment Length        0000 (0)\n+CAE34 Disk Start            0000 (0)\n+CAE36 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA8BA Ext File Attributes   41ED0010 (1106051088)\n+CAE38 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA8BE Local Header Offset   00000BF0 (3056)\n-CA8C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAE3C Local Header Offset   00000BF0 (3056)\n+CAE40 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA8C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAE40: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA8C2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAE40: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA89A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAE18: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA91B CENTRAL HEADER #30    02014B50 (33639248)\n-CA91F Created Zip Spec      14 (20) '2.0'\n-CA920 Created OS            03 (3) 'Unix'\n-CA921 Extract Zip Spec      0A (10) '1.0'\n-CA922 Extract OS            00 (0) 'MS-DOS'\n-CA923 General Purpose Flag  0800 (2048)\n+CAE99 CENTRAL HEADER #30    02014B50 (33639248)\n+CAE9D Created Zip Spec      14 (20) '2.0'\n+CAE9E Created OS            03 (3) 'Unix'\n+CAE9F Extract Zip Spec      0A (10) '1.0'\n+CAEA0 Extract OS            00 (0) 'MS-DOS'\n+CAEA1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA925 Compression Method    0000 (0) 'Stored'\n-CA927 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA92B CRC                   00000000 (0)\n-CA92F Compressed Size       00000000 (0)\n-CA933 Uncompressed Size     00000000 (0)\n-CA937 Filename Length       0074 (116)\n-CA939 Extra Length          0000 (0)\n-CA93B Comment Length        0000 (0)\n-CA93D Disk Start            0000 (0)\n-CA93F Int File Attributes   0000 (0)\n+CAEA3 Compression Method    0000 (0) 'Stored'\n+CAEA5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAEA9 CRC                   00000000 (0)\n+CAEAD Compressed Size       00000000 (0)\n+CAEB1 Uncompressed Size     00000000 (0)\n+CAEB5 Filename Length       0074 (116)\n+CAEB7 Extra Length          0000 (0)\n+CAEB9 Comment Length        0000 (0)\n+CAEBB Disk Start            0000 (0)\n+CAEBD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA941 Ext File Attributes   41ED0010 (1106051088)\n+CAEBF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA945 Local Header Offset   00000C67 (3175)\n-CA949 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAEC3 Local Header Offset   00000C67 (3175)\n+CAEC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA949: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAEC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA949: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAEC7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA921: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAE9F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CA9BD CENTRAL HEADER #31    02014B50 (33639248)\n-CA9C1 Created Zip Spec      14 (20) '2.0'\n-CA9C2 Created OS            03 (3) 'Unix'\n-CA9C3 Extract Zip Spec      0A (10) '1.0'\n-CA9C4 Extract OS            00 (0) 'MS-DOS'\n-CA9C5 General Purpose Flag  0800 (2048)\n+CAF3B CENTRAL HEADER #31    02014B50 (33639248)\n+CAF3F Created Zip Spec      14 (20) '2.0'\n+CAF40 Created OS            03 (3) 'Unix'\n+CAF41 Extract Zip Spec      0A (10) '1.0'\n+CAF42 Extract OS            00 (0) 'MS-DOS'\n+CAF43 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CA9C7 Compression Method    0000 (0) 'Stored'\n-CA9C9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CA9CD CRC                   00000000 (0)\n-CA9D1 Compressed Size       00000000 (0)\n-CA9D5 Uncompressed Size     00000000 (0)\n-CA9D9 Filename Length       0024 (36)\n-CA9DB Extra Length          0000 (0)\n-CA9DD Comment Length        0000 (0)\n-CA9DF Disk Start            0000 (0)\n-CA9E1 Int File Attributes   0000 (0)\n+CAF45 Compression Method    0000 (0) 'Stored'\n+CAF47 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAF4B CRC                   00000000 (0)\n+CAF4F Compressed Size       00000000 (0)\n+CAF53 Uncompressed Size     00000000 (0)\n+CAF57 Filename Length       0024 (36)\n+CAF59 Extra Length          0000 (0)\n+CAF5B Comment Length        0000 (0)\n+CAF5D Disk Start            0000 (0)\n+CAF5F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CA9E3 Ext File Attributes   41ED0010 (1106051088)\n+CAF61 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CA9E7 Local Header Offset   00000CF9 (3321)\n-CA9EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAF65 Local Header Offset   00000CF9 (3321)\n+CAF69 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCA9EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAF69: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCA9EB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAF69: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCA9C3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAF41: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAA0F CENTRAL HEADER #32    02014B50 (33639248)\n-CAA13 Created Zip Spec      14 (20) '2.0'\n-CAA14 Created OS            03 (3) 'Unix'\n-CAA15 Extract Zip Spec      0A (10) '1.0'\n-CAA16 Extract OS            00 (0) 'MS-DOS'\n-CAA17 General Purpose Flag  0800 (2048)\n+CAF8D CENTRAL HEADER #32    02014B50 (33639248)\n+CAF91 Created Zip Spec      14 (20) '2.0'\n+CAF92 Created OS            03 (3) 'Unix'\n+CAF93 Extract Zip Spec      0A (10) '1.0'\n+CAF94 Extract OS            00 (0) 'MS-DOS'\n+CAF95 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAA19 Compression Method    0000 (0) 'Stored'\n-CAA1B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAA1F CRC                   00000000 (0)\n-CAA23 Compressed Size       00000000 (0)\n-CAA27 Uncompressed Size     00000000 (0)\n-CAA2B Filename Length       002D (45)\n-CAA2D Extra Length          0000 (0)\n-CAA2F Comment Length        0000 (0)\n-CAA31 Disk Start            0000 (0)\n-CAA33 Int File Attributes   0000 (0)\n+CAF97 Compression Method    0000 (0) 'Stored'\n+CAF99 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAF9D CRC                   00000000 (0)\n+CAFA1 Compressed Size       00000000 (0)\n+CAFA5 Uncompressed Size     00000000 (0)\n+CAFA9 Filename Length       002D (45)\n+CAFAB Extra Length          0000 (0)\n+CAFAD Comment Length        0000 (0)\n+CAFAF Disk Start            0000 (0)\n+CAFB1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAA35 Ext File Attributes   41ED0010 (1106051088)\n+CAFB3 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAA39 Local Header Offset   00000D3B (3387)\n-CAA3D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CAFB7 Local Header Offset   00000D3B (3387)\n+CAFBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAA3D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAFBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAA3D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCAFBB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAA15: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAF93: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAA6A CENTRAL HEADER #33    02014B50 (33639248)\n-CAA6E Created Zip Spec      14 (20) '2.0'\n-CAA6F Created OS            03 (3) 'Unix'\n-CAA70 Extract Zip Spec      0A (10) '1.0'\n-CAA71 Extract OS            00 (0) 'MS-DOS'\n-CAA72 General Purpose Flag  0800 (2048)\n+CAFE8 CENTRAL HEADER #33    02014B50 (33639248)\n+CAFEC Created Zip Spec      14 (20) '2.0'\n+CAFED Created OS            03 (3) 'Unix'\n+CAFEE Extract Zip Spec      0A (10) '1.0'\n+CAFEF Extract OS            00 (0) 'MS-DOS'\n+CAFF0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAA74 Compression Method    0000 (0) 'Stored'\n-CAA76 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAA7A CRC                   00000000 (0)\n-CAA7E Compressed Size       00000000 (0)\n-CAA82 Uncompressed Size     00000000 (0)\n-CAA86 Filename Length       0073 (115)\n-CAA88 Extra Length          0000 (0)\n-CAA8A Comment Length        0000 (0)\n-CAA8C Disk Start            0000 (0)\n-CAA8E Int File Attributes   0000 (0)\n+CAFF2 Compression Method    0000 (0) 'Stored'\n+CAFF4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CAFF8 CRC                   00000000 (0)\n+CAFFC Compressed Size       00000000 (0)\n+CB000 Uncompressed Size     00000000 (0)\n+CB004 Filename Length       0073 (115)\n+CB006 Extra Length          0000 (0)\n+CB008 Comment Length        0000 (0)\n+CB00A Disk Start            0000 (0)\n+CB00C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAA90 Ext File Attributes   41ED0010 (1106051088)\n+CB00E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAA94 Local Header Offset   00000D86 (3462)\n-CAA98 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB012 Local Header Offset   00000D86 (3462)\n+CB016 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAA98: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB016: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAA98: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB016: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAA70: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCAFEE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAB0B CENTRAL HEADER #34    02014B50 (33639248)\n-CAB0F Created Zip Spec      14 (20) '2.0'\n-CAB10 Created OS            03 (3) 'Unix'\n-CAB11 Extract Zip Spec      0A (10) '1.0'\n-CAB12 Extract OS            00 (0) 'MS-DOS'\n-CAB13 General Purpose Flag  0800 (2048)\n+CB089 CENTRAL HEADER #34    02014B50 (33639248)\n+CB08D Created Zip Spec      14 (20) '2.0'\n+CB08E Created OS            03 (3) 'Unix'\n+CB08F Extract Zip Spec      0A (10) '1.0'\n+CB090 Extract OS            00 (0) 'MS-DOS'\n+CB091 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAB15 Compression Method    0000 (0) 'Stored'\n-CAB17 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAB1B CRC                   00000000 (0)\n-CAB1F Compressed Size       00000000 (0)\n-CAB23 Uncompressed Size     00000000 (0)\n-CAB27 Filename Length       006E (110)\n-CAB29 Extra Length          0000 (0)\n-CAB2B Comment Length        0000 (0)\n-CAB2D Disk Start            0000 (0)\n-CAB2F Int File Attributes   0000 (0)\n+CB093 Compression Method    0000 (0) 'Stored'\n+CB095 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB099 CRC                   00000000 (0)\n+CB09D Compressed Size       00000000 (0)\n+CB0A1 Uncompressed Size     00000000 (0)\n+CB0A5 Filename Length       006E (110)\n+CB0A7 Extra Length          0000 (0)\n+CB0A9 Comment Length        0000 (0)\n+CB0AB Disk Start            0000 (0)\n+CB0AD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAB31 Ext File Attributes   41ED0010 (1106051088)\n+CB0AF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAB35 Local Header Offset   00000E17 (3607)\n-CAB39 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB0B3 Local Header Offset   00000E17 (3607)\n+CB0B7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAB39: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB0B7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAB39: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB0B7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAB11: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB08F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CABA7 CENTRAL HEADER #35    02014B50 (33639248)\n-CABAB Created Zip Spec      14 (20) '2.0'\n-CABAC Created OS            03 (3) 'Unix'\n-CABAD Extract Zip Spec      0A (10) '1.0'\n-CABAE Extract OS            00 (0) 'MS-DOS'\n-CABAF General Purpose Flag  0800 (2048)\n+CB125 CENTRAL HEADER #35    02014B50 (33639248)\n+CB129 Created Zip Spec      14 (20) '2.0'\n+CB12A Created OS            03 (3) 'Unix'\n+CB12B Extract Zip Spec      0A (10) '1.0'\n+CB12C Extract OS            00 (0) 'MS-DOS'\n+CB12D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CABB1 Compression Method    0000 (0) 'Stored'\n-CABB3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CABB7 CRC                   00000000 (0)\n-CABBB Compressed Size       00000000 (0)\n-CABBF Uncompressed Size     00000000 (0)\n-CABC3 Filename Length       0075 (117)\n-CABC5 Extra Length          0000 (0)\n-CABC7 Comment Length        0000 (0)\n-CABC9 Disk Start            0000 (0)\n-CABCB Int File Attributes   0000 (0)\n+CB12F Compression Method    0000 (0) 'Stored'\n+CB131 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB135 CRC                   00000000 (0)\n+CB139 Compressed Size       00000000 (0)\n+CB13D Uncompressed Size     00000000 (0)\n+CB141 Filename Length       0075 (117)\n+CB143 Extra Length          0000 (0)\n+CB145 Comment Length        0000 (0)\n+CB147 Disk Start            0000 (0)\n+CB149 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CABCD Ext File Attributes   41ED0010 (1106051088)\n+CB14B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CABD1 Local Header Offset   00000EA3 (3747)\n-CABD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB14F Local Header Offset   00000EA3 (3747)\n+CB153 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCABD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB153: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCABD5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB153: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCABAD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB12B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAC4A CENTRAL HEADER #36    02014B50 (33639248)\n-CAC4E Created Zip Spec      14 (20) '2.0'\n-CAC4F Created OS            03 (3) 'Unix'\n-CAC50 Extract Zip Spec      0A (10) '1.0'\n-CAC51 Extract OS            00 (0) 'MS-DOS'\n-CAC52 General Purpose Flag  0800 (2048)\n+CB1C8 CENTRAL HEADER #36    02014B50 (33639248)\n+CB1CC Created Zip Spec      14 (20) '2.0'\n+CB1CD Created OS            03 (3) 'Unix'\n+CB1CE Extract Zip Spec      0A (10) '1.0'\n+CB1CF Extract OS            00 (0) 'MS-DOS'\n+CB1D0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAC54 Compression Method    0000 (0) 'Stored'\n-CAC56 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAC5A CRC                   00000000 (0)\n-CAC5E Compressed Size       00000000 (0)\n-CAC62 Uncompressed Size     00000000 (0)\n-CAC66 Filename Length       0022 (34)\n-CAC68 Extra Length          0000 (0)\n-CAC6A Comment Length        0000 (0)\n-CAC6C Disk Start            0000 (0)\n-CAC6E Int File Attributes   0000 (0)\n+CB1D2 Compression Method    0000 (0) 'Stored'\n+CB1D4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB1D8 CRC                   00000000 (0)\n+CB1DC Compressed Size       00000000 (0)\n+CB1E0 Uncompressed Size     00000000 (0)\n+CB1E4 Filename Length       0022 (34)\n+CB1E6 Extra Length          0000 (0)\n+CB1E8 Comment Length        0000 (0)\n+CB1EA Disk Start            0000 (0)\n+CB1EC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAC70 Ext File Attributes   41ED0010 (1106051088)\n+CB1EE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAC74 Local Header Offset   00000F36 (3894)\n-CAC78 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB1F2 Local Header Offset   00000F36 (3894)\n+CB1F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAC78: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB1F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAC78: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB1F6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAC50: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB1CE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAC9A CENTRAL HEADER #37    02014B50 (33639248)\n-CAC9E Created Zip Spec      14 (20) '2.0'\n-CAC9F Created OS            03 (3) 'Unix'\n-CACA0 Extract Zip Spec      0A (10) '1.0'\n-CACA1 Extract OS            00 (0) 'MS-DOS'\n-CACA2 General Purpose Flag  0800 (2048)\n+CB218 CENTRAL HEADER #37    02014B50 (33639248)\n+CB21C Created Zip Spec      14 (20) '2.0'\n+CB21D Created OS            03 (3) 'Unix'\n+CB21E Extract Zip Spec      0A (10) '1.0'\n+CB21F Extract OS            00 (0) 'MS-DOS'\n+CB220 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CACA4 Compression Method    0000 (0) 'Stored'\n-CACA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CACAA CRC                   00000000 (0)\n-CACAE Compressed Size       00000000 (0)\n-CACB2 Uncompressed Size     00000000 (0)\n-CACB6 Filename Length       002B (43)\n-CACB8 Extra Length          0000 (0)\n-CACBA Comment Length        0000 (0)\n-CACBC Disk Start            0000 (0)\n-CACBE Int File Attributes   0000 (0)\n+CB222 Compression Method    0000 (0) 'Stored'\n+CB224 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB228 CRC                   00000000 (0)\n+CB22C Compressed Size       00000000 (0)\n+CB230 Uncompressed Size     00000000 (0)\n+CB234 Filename Length       002B (43)\n+CB236 Extra Length          0000 (0)\n+CB238 Comment Length        0000 (0)\n+CB23A Disk Start            0000 (0)\n+CB23C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CACC0 Ext File Attributes   41ED0010 (1106051088)\n+CB23E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CACC4 Local Header Offset   00000F76 (3958)\n-CACC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB242 Local Header Offset   00000F76 (3958)\n+CB246 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCACC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB246: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCACC8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB246: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCACA0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB21E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CACF3 CENTRAL HEADER #38    02014B50 (33639248)\n-CACF7 Created Zip Spec      14 (20) '2.0'\n-CACF8 Created OS            03 (3) 'Unix'\n-CACF9 Extract Zip Spec      0A (10) '1.0'\n-CACFA Extract OS            00 (0) 'MS-DOS'\n-CACFB General Purpose Flag  0800 (2048)\n+CB271 CENTRAL HEADER #38    02014B50 (33639248)\n+CB275 Created Zip Spec      14 (20) '2.0'\n+CB276 Created OS            03 (3) 'Unix'\n+CB277 Extract Zip Spec      0A (10) '1.0'\n+CB278 Extract OS            00 (0) 'MS-DOS'\n+CB279 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CACFD Compression Method    0000 (0) 'Stored'\n-CACFF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAD03 CRC                   00000000 (0)\n-CAD07 Compressed Size       00000000 (0)\n-CAD0B Uncompressed Size     00000000 (0)\n-CAD0F Filename Length       0057 (87)\n-CAD11 Extra Length          0000 (0)\n-CAD13 Comment Length        0000 (0)\n-CAD15 Disk Start            0000 (0)\n-CAD17 Int File Attributes   0000 (0)\n+CB27B Compression Method    0000 (0) 'Stored'\n+CB27D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB281 CRC                   00000000 (0)\n+CB285 Compressed Size       00000000 (0)\n+CB289 Uncompressed Size     00000000 (0)\n+CB28D Filename Length       0057 (87)\n+CB28F Extra Length          0000 (0)\n+CB291 Comment Length        0000 (0)\n+CB293 Disk Start            0000 (0)\n+CB295 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAD19 Ext File Attributes   41ED0010 (1106051088)\n+CB297 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAD1D Local Header Offset   00000FBF (4031)\n-CAD21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB29B Local Header Offset   00000FBF (4031)\n+CB29F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAD21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB29F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAD21: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB29F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCACF9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB277: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAD78 CENTRAL HEADER #39    02014B50 (33639248)\n-CAD7C Created Zip Spec      14 (20) '2.0'\n-CAD7D Created OS            03 (3) 'Unix'\n-CAD7E Extract Zip Spec      0A (10) '1.0'\n-CAD7F Extract OS            00 (0) 'MS-DOS'\n-CAD80 General Purpose Flag  0800 (2048)\n+CB2F6 CENTRAL HEADER #39    02014B50 (33639248)\n+CB2FA Created Zip Spec      14 (20) '2.0'\n+CB2FB Created OS            03 (3) 'Unix'\n+CB2FC Extract Zip Spec      0A (10) '1.0'\n+CB2FD Extract OS            00 (0) 'MS-DOS'\n+CB2FE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAD82 Compression Method    0000 (0) 'Stored'\n-CAD84 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAD88 CRC                   00000000 (0)\n-CAD8C Compressed Size       00000000 (0)\n-CAD90 Uncompressed Size     00000000 (0)\n-CAD94 Filename Length       0056 (86)\n-CAD96 Extra Length          0000 (0)\n-CAD98 Comment Length        0000 (0)\n-CAD9A Disk Start            0000 (0)\n-CAD9C Int File Attributes   0000 (0)\n+CB300 Compression Method    0000 (0) 'Stored'\n+CB302 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB306 CRC                   00000000 (0)\n+CB30A Compressed Size       00000000 (0)\n+CB30E Uncompressed Size     00000000 (0)\n+CB312 Filename Length       0056 (86)\n+CB314 Extra Length          0000 (0)\n+CB316 Comment Length        0000 (0)\n+CB318 Disk Start            0000 (0)\n+CB31A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAD9E Ext File Attributes   41ED0010 (1106051088)\n+CB31C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CADA2 Local Header Offset   00001034 (4148)\n-CADA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB320 Local Header Offset   00001034 (4148)\n+CB324 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCADA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB324: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCADA6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB324: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAD7E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB2FC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CADFC CENTRAL HEADER #40    02014B50 (33639248)\n-CAE00 Created Zip Spec      14 (20) '2.0'\n-CAE01 Created OS            03 (3) 'Unix'\n-CAE02 Extract Zip Spec      0A (10) '1.0'\n-CAE03 Extract OS            00 (0) 'MS-DOS'\n-CAE04 General Purpose Flag  0800 (2048)\n+CB37A CENTRAL HEADER #40    02014B50 (33639248)\n+CB37E Created Zip Spec      14 (20) '2.0'\n+CB37F Created OS            03 (3) 'Unix'\n+CB380 Extract Zip Spec      0A (10) '1.0'\n+CB381 Extract OS            00 (0) 'MS-DOS'\n+CB382 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAE06 Compression Method    0000 (0) 'Stored'\n-CAE08 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAE0C CRC                   00000000 (0)\n-CAE10 Compressed Size       00000000 (0)\n-CAE14 Uncompressed Size     00000000 (0)\n-CAE18 Filename Length       0055 (85)\n-CAE1A Extra Length          0000 (0)\n-CAE1C Comment Length        0000 (0)\n-CAE1E Disk Start            0000 (0)\n-CAE20 Int File Attributes   0000 (0)\n+CB384 Compression Method    0000 (0) 'Stored'\n+CB386 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB38A CRC                   00000000 (0)\n+CB38E Compressed Size       00000000 (0)\n+CB392 Uncompressed Size     00000000 (0)\n+CB396 Filename Length       0055 (85)\n+CB398 Extra Length          0000 (0)\n+CB39A Comment Length        0000 (0)\n+CB39C Disk Start            0000 (0)\n+CB39E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAE22 Ext File Attributes   41ED0010 (1106051088)\n+CB3A0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAE26 Local Header Offset   000010A8 (4264)\n-CAE2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB3A4 Local Header Offset   000010A8 (4264)\n+CB3A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAE2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB3A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAE2A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB3A8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAE02: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB380: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAE7F CENTRAL HEADER #41    02014B50 (33639248)\n-CAE83 Created Zip Spec      14 (20) '2.0'\n-CAE84 Created OS            03 (3) 'Unix'\n-CAE85 Extract Zip Spec      0A (10) '1.0'\n-CAE86 Extract OS            00 (0) 'MS-DOS'\n-CAE87 General Purpose Flag  0800 (2048)\n+CB3FD CENTRAL HEADER #41    02014B50 (33639248)\n+CB401 Created Zip Spec      14 (20) '2.0'\n+CB402 Created OS            03 (3) 'Unix'\n+CB403 Extract Zip Spec      0A (10) '1.0'\n+CB404 Extract OS            00 (0) 'MS-DOS'\n+CB405 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAE89 Compression Method    0000 (0) 'Stored'\n-CAE8B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAE8F CRC                   00000000 (0)\n-CAE93 Compressed Size       00000000 (0)\n-CAE97 Uncompressed Size     00000000 (0)\n-CAE9B Filename Length       002B (43)\n-CAE9D Extra Length          0000 (0)\n-CAE9F Comment Length        0000 (0)\n-CAEA1 Disk Start            0000 (0)\n-CAEA3 Int File Attributes   0000 (0)\n+CB407 Compression Method    0000 (0) 'Stored'\n+CB409 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB40D CRC                   00000000 (0)\n+CB411 Compressed Size       00000000 (0)\n+CB415 Uncompressed Size     00000000 (0)\n+CB419 Filename Length       002B (43)\n+CB41B Extra Length          0000 (0)\n+CB41D Comment Length        0000 (0)\n+CB41F Disk Start            0000 (0)\n+CB421 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAEA5 Ext File Attributes   41ED0010 (1106051088)\n+CB423 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAEA9 Local Header Offset   0000111B (4379)\n-CAEAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB427 Local Header Offset   0000111B (4379)\n+CB42B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAEAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB42B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAEAD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB42B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAE85: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB403: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAED8 CENTRAL HEADER #42    02014B50 (33639248)\n-CAEDC Created Zip Spec      14 (20) '2.0'\n-CAEDD Created OS            03 (3) 'Unix'\n-CAEDE Extract Zip Spec      0A (10) '1.0'\n-CAEDF Extract OS            00 (0) 'MS-DOS'\n-CAEE0 General Purpose Flag  0800 (2048)\n+CB456 CENTRAL HEADER #42    02014B50 (33639248)\n+CB45A Created Zip Spec      14 (20) '2.0'\n+CB45B Created OS            03 (3) 'Unix'\n+CB45C Extract Zip Spec      0A (10) '1.0'\n+CB45D Extract OS            00 (0) 'MS-DOS'\n+CB45E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAEE2 Compression Method    0000 (0) 'Stored'\n-CAEE4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAEE8 CRC                   00000000 (0)\n-CAEEC Compressed Size       00000000 (0)\n-CAEF0 Uncompressed Size     00000000 (0)\n-CAEF4 Filename Length       0034 (52)\n-CAEF6 Extra Length          0000 (0)\n-CAEF8 Comment Length        0000 (0)\n-CAEFA Disk Start            0000 (0)\n-CAEFC Int File Attributes   0000 (0)\n+CB460 Compression Method    0000 (0) 'Stored'\n+CB462 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB466 CRC                   00000000 (0)\n+CB46A Compressed Size       00000000 (0)\n+CB46E Uncompressed Size     00000000 (0)\n+CB472 Filename Length       0034 (52)\n+CB474 Extra Length          0000 (0)\n+CB476 Comment Length        0000 (0)\n+CB478 Disk Start            0000 (0)\n+CB47A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAEFE Ext File Attributes   41ED0010 (1106051088)\n+CB47C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAF02 Local Header Offset   00001164 (4452)\n-CAF06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB480 Local Header Offset   00001164 (4452)\n+CB484 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAF06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB484: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAF06: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB484: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAEDE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB45C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAF3A CENTRAL HEADER #43    02014B50 (33639248)\n-CAF3E Created Zip Spec      14 (20) '2.0'\n-CAF3F Created OS            03 (3) 'Unix'\n-CAF40 Extract Zip Spec      0A (10) '1.0'\n-CAF41 Extract OS            00 (0) 'MS-DOS'\n-CAF42 General Purpose Flag  0800 (2048)\n+CB4B8 CENTRAL HEADER #43    02014B50 (33639248)\n+CB4BC Created Zip Spec      14 (20) '2.0'\n+CB4BD Created OS            03 (3) 'Unix'\n+CB4BE Extract Zip Spec      0A (10) '1.0'\n+CB4BF Extract OS            00 (0) 'MS-DOS'\n+CB4C0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAF44 Compression Method    0000 (0) 'Stored'\n-CAF46 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAF4A CRC                   00000000 (0)\n-CAF4E Compressed Size       00000000 (0)\n-CAF52 Uncompressed Size     00000000 (0)\n-CAF56 Filename Length       007B (123)\n-CAF58 Extra Length          0000 (0)\n-CAF5A Comment Length        0000 (0)\n-CAF5C Disk Start            0000 (0)\n-CAF5E Int File Attributes   0000 (0)\n+CB4C2 Compression Method    0000 (0) 'Stored'\n+CB4C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB4C8 CRC                   00000000 (0)\n+CB4CC Compressed Size       00000000 (0)\n+CB4D0 Uncompressed Size     00000000 (0)\n+CB4D4 Filename Length       007B (123)\n+CB4D6 Extra Length          0000 (0)\n+CB4D8 Comment Length        0000 (0)\n+CB4DA Disk Start            0000 (0)\n+CB4DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CAF60 Ext File Attributes   41ED0010 (1106051088)\n+CB4DE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CAF64 Local Header Offset   000011B6 (4534)\n-CAF68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB4E2 Local Header Offset   000011B6 (4534)\n+CB4E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCAF68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB4E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCAF68: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB4E6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAF40: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB4BE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CAFE3 CENTRAL HEADER #44    02014B50 (33639248)\n-CAFE7 Created Zip Spec      14 (20) '2.0'\n-CAFE8 Created OS            03 (3) 'Unix'\n-CAFE9 Extract Zip Spec      0A (10) '1.0'\n-CAFEA Extract OS            00 (0) 'MS-DOS'\n-CAFEB General Purpose Flag  0800 (2048)\n+CB561 CENTRAL HEADER #44    02014B50 (33639248)\n+CB565 Created Zip Spec      14 (20) '2.0'\n+CB566 Created OS            03 (3) 'Unix'\n+CB567 Extract Zip Spec      0A (10) '1.0'\n+CB568 Extract OS            00 (0) 'MS-DOS'\n+CB569 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CAFED Compression Method    0000 (0) 'Stored'\n-CAFEF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CAFF3 CRC                   00000000 (0)\n-CAFF7 Compressed Size       00000000 (0)\n-CAFFB Uncompressed Size     00000000 (0)\n-CAFFF Filename Length       0025 (37)\n-CB001 Extra Length          0000 (0)\n-CB003 Comment Length        0000 (0)\n-CB005 Disk Start            0000 (0)\n-CB007 Int File Attributes   0000 (0)\n+CB56B Compression Method    0000 (0) 'Stored'\n+CB56D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB571 CRC                   00000000 (0)\n+CB575 Compressed Size       00000000 (0)\n+CB579 Uncompressed Size     00000000 (0)\n+CB57D Filename Length       0025 (37)\n+CB57F Extra Length          0000 (0)\n+CB581 Comment Length        0000 (0)\n+CB583 Disk Start            0000 (0)\n+CB585 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB009 Ext File Attributes   41ED0010 (1106051088)\n+CB587 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB00D Local Header Offset   0000124F (4687)\n-CB011 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB58B Local Header Offset   0000124F (4687)\n+CB58F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB011: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB58F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB011: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB58F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCAFE9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB567: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB036 CENTRAL HEADER #45    02014B50 (33639248)\n-CB03A Created Zip Spec      14 (20) '2.0'\n-CB03B Created OS            03 (3) 'Unix'\n-CB03C Extract Zip Spec      0A (10) '1.0'\n-CB03D Extract OS            00 (0) 'MS-DOS'\n-CB03E General Purpose Flag  0800 (2048)\n+CB5B4 CENTRAL HEADER #45    02014B50 (33639248)\n+CB5B8 Created Zip Spec      14 (20) '2.0'\n+CB5B9 Created OS            03 (3) 'Unix'\n+CB5BA Extract Zip Spec      0A (10) '1.0'\n+CB5BB Extract OS            00 (0) 'MS-DOS'\n+CB5BC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB040 Compression Method    0000 (0) 'Stored'\n-CB042 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB046 CRC                   00000000 (0)\n-CB04A Compressed Size       00000000 (0)\n-CB04E Uncompressed Size     00000000 (0)\n-CB052 Filename Length       002E (46)\n-CB054 Extra Length          0000 (0)\n-CB056 Comment Length        0000 (0)\n-CB058 Disk Start            0000 (0)\n-CB05A Int File Attributes   0000 (0)\n+CB5BE Compression Method    0000 (0) 'Stored'\n+CB5C0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB5C4 CRC                   00000000 (0)\n+CB5C8 Compressed Size       00000000 (0)\n+CB5CC Uncompressed Size     00000000 (0)\n+CB5D0 Filename Length       002E (46)\n+CB5D2 Extra Length          0000 (0)\n+CB5D4 Comment Length        0000 (0)\n+CB5D6 Disk Start            0000 (0)\n+CB5D8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB05C Ext File Attributes   41ED0010 (1106051088)\n+CB5DA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB060 Local Header Offset   00001292 (4754)\n-CB064 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB5DE Local Header Offset   00001292 (4754)\n+CB5E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB064: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB5E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB064: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB5E2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB03C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB5BA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB092 CENTRAL HEADER #46    02014B50 (33639248)\n-CB096 Created Zip Spec      14 (20) '2.0'\n-CB097 Created OS            03 (3) 'Unix'\n-CB098 Extract Zip Spec      0A (10) '1.0'\n-CB099 Extract OS            00 (0) 'MS-DOS'\n-CB09A General Purpose Flag  0800 (2048)\n+CB610 CENTRAL HEADER #46    02014B50 (33639248)\n+CB614 Created Zip Spec      14 (20) '2.0'\n+CB615 Created OS            03 (3) 'Unix'\n+CB616 Extract Zip Spec      0A (10) '1.0'\n+CB617 Extract OS            00 (0) 'MS-DOS'\n+CB618 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB09C Compression Method    0000 (0) 'Stored'\n-CB09E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB0A2 CRC                   00000000 (0)\n-CB0A6 Compressed Size       00000000 (0)\n-CB0AA Uncompressed Size     00000000 (0)\n-CB0AE Filename Length       005F (95)\n-CB0B0 Extra Length          0000 (0)\n-CB0B2 Comment Length        0000 (0)\n-CB0B4 Disk Start            0000 (0)\n-CB0B6 Int File Attributes   0000 (0)\n+CB61A Compression Method    0000 (0) 'Stored'\n+CB61C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB620 CRC                   00000000 (0)\n+CB624 Compressed Size       00000000 (0)\n+CB628 Uncompressed Size     00000000 (0)\n+CB62C Filename Length       005F (95)\n+CB62E Extra Length          0000 (0)\n+CB630 Comment Length        0000 (0)\n+CB632 Disk Start            0000 (0)\n+CB634 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB0B8 Ext File Attributes   41ED0010 (1106051088)\n+CB636 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB0BC Local Header Offset   000012DE (4830)\n-CB0C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB63A Local Header Offset   000012DE (4830)\n+CB63E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB0C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB63E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB0C0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB63E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB098: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB616: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB11F CENTRAL HEADER #47    02014B50 (33639248)\n-CB123 Created Zip Spec      14 (20) '2.0'\n-CB124 Created OS            03 (3) 'Unix'\n-CB125 Extract Zip Spec      0A (10) '1.0'\n-CB126 Extract OS            00 (0) 'MS-DOS'\n-CB127 General Purpose Flag  0800 (2048)\n+CB69D CENTRAL HEADER #47    02014B50 (33639248)\n+CB6A1 Created Zip Spec      14 (20) '2.0'\n+CB6A2 Created OS            03 (3) 'Unix'\n+CB6A3 Extract Zip Spec      0A (10) '1.0'\n+CB6A4 Extract OS            00 (0) 'MS-DOS'\n+CB6A5 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB129 Compression Method    0000 (0) 'Stored'\n-CB12B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB12F CRC                   00000000 (0)\n-CB133 Compressed Size       00000000 (0)\n-CB137 Uncompressed Size     00000000 (0)\n-CB13B Filename Length       006C (108)\n-CB13D Extra Length          0000 (0)\n-CB13F Comment Length        0000 (0)\n-CB141 Disk Start            0000 (0)\n-CB143 Int File Attributes   0000 (0)\n+CB6A7 Compression Method    0000 (0) 'Stored'\n+CB6A9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB6AD CRC                   00000000 (0)\n+CB6B1 Compressed Size       00000000 (0)\n+CB6B5 Uncompressed Size     00000000 (0)\n+CB6B9 Filename Length       006C (108)\n+CB6BB Extra Length          0000 (0)\n+CB6BD Comment Length        0000 (0)\n+CB6BF Disk Start            0000 (0)\n+CB6C1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB145 Ext File Attributes   41ED0010 (1106051088)\n+CB6C3 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB149 Local Header Offset   0000135B (4955)\n-CB14D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB6C7 Local Header Offset   0000135B (4955)\n+CB6CB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB14D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB6CB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB14D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB6CB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB125: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB6A3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB1B9 CENTRAL HEADER #48    02014B50 (33639248)\n-CB1BD Created Zip Spec      14 (20) '2.0'\n-CB1BE Created OS            03 (3) 'Unix'\n-CB1BF Extract Zip Spec      0A (10) '1.0'\n-CB1C0 Extract OS            00 (0) 'MS-DOS'\n-CB1C1 General Purpose Flag  0800 (2048)\n+CB737 CENTRAL HEADER #48    02014B50 (33639248)\n+CB73B Created Zip Spec      14 (20) '2.0'\n+CB73C Created OS            03 (3) 'Unix'\n+CB73D Extract Zip Spec      0A (10) '1.0'\n+CB73E Extract OS            00 (0) 'MS-DOS'\n+CB73F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB1C3 Compression Method    0000 (0) 'Stored'\n-CB1C5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB1C9 CRC                   00000000 (0)\n-CB1CD Compressed Size       00000000 (0)\n-CB1D1 Uncompressed Size     00000000 (0)\n-CB1D5 Filename Length       002F (47)\n-CB1D7 Extra Length          0000 (0)\n-CB1D9 Comment Length        0000 (0)\n-CB1DB Disk Start            0000 (0)\n-CB1DD Int File Attributes   0000 (0)\n+CB741 Compression Method    0000 (0) 'Stored'\n+CB743 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB747 CRC                   00000000 (0)\n+CB74B Compressed Size       00000000 (0)\n+CB74F Uncompressed Size     00000000 (0)\n+CB753 Filename Length       002F (47)\n+CB755 Extra Length          0000 (0)\n+CB757 Comment Length        0000 (0)\n+CB759 Disk Start            0000 (0)\n+CB75B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB1DF Ext File Attributes   41ED0010 (1106051088)\n+CB75D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB1E3 Local Header Offset   000013E5 (5093)\n-CB1E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB761 Local Header Offset   000013E5 (5093)\n+CB765 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB1E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB765: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB1E7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB765: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB1BF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB73D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB216 CENTRAL HEADER #49    02014B50 (33639248)\n-CB21A Created Zip Spec      14 (20) '2.0'\n-CB21B Created OS            03 (3) 'Unix'\n-CB21C Extract Zip Spec      0A (10) '1.0'\n-CB21D Extract OS            00 (0) 'MS-DOS'\n-CB21E General Purpose Flag  0800 (2048)\n+CB794 CENTRAL HEADER #49    02014B50 (33639248)\n+CB798 Created Zip Spec      14 (20) '2.0'\n+CB799 Created OS            03 (3) 'Unix'\n+CB79A Extract Zip Spec      0A (10) '1.0'\n+CB79B Extract OS            00 (0) 'MS-DOS'\n+CB79C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB220 Compression Method    0000 (0) 'Stored'\n-CB222 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB226 CRC                   00000000 (0)\n-CB22A Compressed Size       00000000 (0)\n-CB22E Uncompressed Size     00000000 (0)\n-CB232 Filename Length       0038 (56)\n-CB234 Extra Length          0000 (0)\n-CB236 Comment Length        0000 (0)\n-CB238 Disk Start            0000 (0)\n-CB23A Int File Attributes   0000 (0)\n+CB79E Compression Method    0000 (0) 'Stored'\n+CB7A0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB7A4 CRC                   00000000 (0)\n+CB7A8 Compressed Size       00000000 (0)\n+CB7AC Uncompressed Size     00000000 (0)\n+CB7B0 Filename Length       0038 (56)\n+CB7B2 Extra Length          0000 (0)\n+CB7B4 Comment Length        0000 (0)\n+CB7B6 Disk Start            0000 (0)\n+CB7B8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB23C Ext File Attributes   41ED0010 (1106051088)\n+CB7BA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB240 Local Header Offset   00001432 (5170)\n-CB244 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB7BE Local Header Offset   00001432 (5170)\n+CB7C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB244: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB7C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB244: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB7C2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB21C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB79A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB27C CENTRAL HEADER #50    02014B50 (33639248)\n-CB280 Created Zip Spec      14 (20) '2.0'\n-CB281 Created OS            03 (3) 'Unix'\n-CB282 Extract Zip Spec      0A (10) '1.0'\n-CB283 Extract OS            00 (0) 'MS-DOS'\n-CB284 General Purpose Flag  0800 (2048)\n+CB7FA CENTRAL HEADER #50    02014B50 (33639248)\n+CB7FE Created Zip Spec      14 (20) '2.0'\n+CB7FF Created OS            03 (3) 'Unix'\n+CB800 Extract Zip Spec      0A (10) '1.0'\n+CB801 Extract OS            00 (0) 'MS-DOS'\n+CB802 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB286 Compression Method    0000 (0) 'Stored'\n-CB288 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB28C CRC                   00000000 (0)\n-CB290 Compressed Size       00000000 (0)\n-CB294 Uncompressed Size     00000000 (0)\n-CB298 Filename Length       007A (122)\n-CB29A Extra Length          0000 (0)\n-CB29C Comment Length        0000 (0)\n-CB29E Disk Start            0000 (0)\n-CB2A0 Int File Attributes   0000 (0)\n+CB804 Compression Method    0000 (0) 'Stored'\n+CB806 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB80A CRC                   00000000 (0)\n+CB80E Compressed Size       00000000 (0)\n+CB812 Uncompressed Size     00000000 (0)\n+CB816 Filename Length       007A (122)\n+CB818 Extra Length          0000 (0)\n+CB81A Comment Length        0000 (0)\n+CB81C Disk Start            0000 (0)\n+CB81E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB2A2 Ext File Attributes   41ED0010 (1106051088)\n+CB820 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB2A6 Local Header Offset   00001488 (5256)\n-CB2AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB824 Local Header Offset   00001488 (5256)\n+CB828 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB2AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB828: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB2AA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB828: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB282: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB800: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB324 CENTRAL HEADER #51    02014B50 (33639248)\n-CB328 Created Zip Spec      14 (20) '2.0'\n-CB329 Created OS            03 (3) 'Unix'\n-CB32A Extract Zip Spec      0A (10) '1.0'\n-CB32B Extract OS            00 (0) 'MS-DOS'\n-CB32C General Purpose Flag  0800 (2048)\n+CB8A2 CENTRAL HEADER #51    02014B50 (33639248)\n+CB8A6 Created Zip Spec      14 (20) '2.0'\n+CB8A7 Created OS            03 (3) 'Unix'\n+CB8A8 Extract Zip Spec      0A (10) '1.0'\n+CB8A9 Extract OS            00 (0) 'MS-DOS'\n+CB8AA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB32E Compression Method    0000 (0) 'Stored'\n-CB330 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB334 CRC                   00000000 (0)\n-CB338 Compressed Size       00000000 (0)\n-CB33C Uncompressed Size     00000000 (0)\n-CB340 Filename Length       003B (59)\n-CB342 Extra Length          0000 (0)\n-CB344 Comment Length        0000 (0)\n-CB346 Disk Start            0000 (0)\n-CB348 Int File Attributes   0000 (0)\n+CB8AC Compression Method    0000 (0) 'Stored'\n+CB8AE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB8B2 CRC                   00000000 (0)\n+CB8B6 Compressed Size       00000000 (0)\n+CB8BA Uncompressed Size     00000000 (0)\n+CB8BE Filename Length       003B (59)\n+CB8C0 Extra Length          0000 (0)\n+CB8C2 Comment Length        0000 (0)\n+CB8C4 Disk Start            0000 (0)\n+CB8C6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB34A Ext File Attributes   41ED0010 (1106051088)\n+CB8C8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB34E Local Header Offset   00001520 (5408)\n-CB352 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB8CC Local Header Offset   00001520 (5408)\n+CB8D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB352: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB8D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB352: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB8D0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB32A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB8A8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB38D CENTRAL HEADER #52    02014B50 (33639248)\n-CB391 Created Zip Spec      14 (20) '2.0'\n-CB392 Created OS            03 (3) 'Unix'\n-CB393 Extract Zip Spec      0A (10) '1.0'\n-CB394 Extract OS            00 (0) 'MS-DOS'\n-CB395 General Purpose Flag  0800 (2048)\n+CB90B CENTRAL HEADER #52    02014B50 (33639248)\n+CB90F Created Zip Spec      14 (20) '2.0'\n+CB910 Created OS            03 (3) 'Unix'\n+CB911 Extract Zip Spec      0A (10) '1.0'\n+CB912 Extract OS            00 (0) 'MS-DOS'\n+CB913 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB397 Compression Method    0000 (0) 'Stored'\n-CB399 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB39D CRC                   00000000 (0)\n-CB3A1 Compressed Size       00000000 (0)\n-CB3A5 Uncompressed Size     00000000 (0)\n-CB3A9 Filename Length       0044 (68)\n-CB3AB Extra Length          0000 (0)\n-CB3AD Comment Length        0000 (0)\n-CB3AF Disk Start            0000 (0)\n-CB3B1 Int File Attributes   0000 (0)\n+CB915 Compression Method    0000 (0) 'Stored'\n+CB917 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB91B CRC                   00000000 (0)\n+CB91F Compressed Size       00000000 (0)\n+CB923 Uncompressed Size     00000000 (0)\n+CB927 Filename Length       0044 (68)\n+CB929 Extra Length          0000 (0)\n+CB92B Comment Length        0000 (0)\n+CB92D Disk Start            0000 (0)\n+CB92F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB3B3 Ext File Attributes   41ED0010 (1106051088)\n+CB931 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB3B7 Local Header Offset   00001579 (5497)\n-CB3BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB935 Local Header Offset   00001579 (5497)\n+CB939 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB3BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB939: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB3BB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB939: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB393: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB911: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB3FF CENTRAL HEADER #53    02014B50 (33639248)\n-CB403 Created Zip Spec      14 (20) '2.0'\n-CB404 Created OS            03 (3) 'Unix'\n-CB405 Extract Zip Spec      0A (10) '1.0'\n-CB406 Extract OS            00 (0) 'MS-DOS'\n-CB407 General Purpose Flag  0800 (2048)\n+CB97D CENTRAL HEADER #53    02014B50 (33639248)\n+CB981 Created Zip Spec      14 (20) '2.0'\n+CB982 Created OS            03 (3) 'Unix'\n+CB983 Extract Zip Spec      0A (10) '1.0'\n+CB984 Extract OS            00 (0) 'MS-DOS'\n+CB985 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB409 Compression Method    0000 (0) 'Stored'\n-CB40B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB40F CRC                   00000000 (0)\n-CB413 Compressed Size       00000000 (0)\n-CB417 Uncompressed Size     00000000 (0)\n-CB41B Filename Length       0081 (129)\n-CB41D Extra Length          0000 (0)\n-CB41F Comment Length        0000 (0)\n-CB421 Disk Start            0000 (0)\n-CB423 Int File Attributes   0000 (0)\n+CB987 Compression Method    0000 (0) 'Stored'\n+CB989 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CB98D CRC                   00000000 (0)\n+CB991 Compressed Size       00000000 (0)\n+CB995 Uncompressed Size     00000000 (0)\n+CB999 Filename Length       0081 (129)\n+CB99B Extra Length          0000 (0)\n+CB99D Comment Length        0000 (0)\n+CB99F Disk Start            0000 (0)\n+CB9A1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB425 Ext File Attributes   41ED0010 (1106051088)\n+CB9A3 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB429 Local Header Offset   000015DB (5595)\n-CB42D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CB9A7 Local Header Offset   000015DB (5595)\n+CB9AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB42D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB9AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB42D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCB9AB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB405: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCB983: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB4AE CENTRAL HEADER #54    02014B50 (33639248)\n-CB4B2 Created Zip Spec      14 (20) '2.0'\n-CB4B3 Created OS            03 (3) 'Unix'\n-CB4B4 Extract Zip Spec      0A (10) '1.0'\n-CB4B5 Extract OS            00 (0) 'MS-DOS'\n-CB4B6 General Purpose Flag  0800 (2048)\n+CBA2C CENTRAL HEADER #54    02014B50 (33639248)\n+CBA30 Created Zip Spec      14 (20) '2.0'\n+CBA31 Created OS            03 (3) 'Unix'\n+CBA32 Extract Zip Spec      0A (10) '1.0'\n+CBA33 Extract OS            00 (0) 'MS-DOS'\n+CBA34 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB4B8 Compression Method    0000 (0) 'Stored'\n-CB4BA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB4BE CRC                   00000000 (0)\n-CB4C2 Compressed Size       00000000 (0)\n-CB4C6 Uncompressed Size     00000000 (0)\n-CB4CA Filename Length       007D (125)\n-CB4CC Extra Length          0000 (0)\n-CB4CE Comment Length        0000 (0)\n-CB4D0 Disk Start            0000 (0)\n-CB4D2 Int File Attributes   0000 (0)\n+CBA36 Compression Method    0000 (0) 'Stored'\n+CBA38 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBA3C CRC                   00000000 (0)\n+CBA40 Compressed Size       00000000 (0)\n+CBA44 Uncompressed Size     00000000 (0)\n+CBA48 Filename Length       007D (125)\n+CBA4A Extra Length          0000 (0)\n+CBA4C Comment Length        0000 (0)\n+CBA4E Disk Start            0000 (0)\n+CBA50 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB4D4 Ext File Attributes   41ED0010 (1106051088)\n+CBA52 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB4D8 Local Header Offset   0000167A (5754)\n-CB4DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBA56 Local Header Offset   0000167A (5754)\n+CBA5A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB4DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBA5A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB4DC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBA5A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB4B4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBA32: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB559 CENTRAL HEADER #55    02014B50 (33639248)\n-CB55D Created Zip Spec      14 (20) '2.0'\n-CB55E Created OS            03 (3) 'Unix'\n-CB55F Extract Zip Spec      0A (10) '1.0'\n-CB560 Extract OS            00 (0) 'MS-DOS'\n-CB561 General Purpose Flag  0800 (2048)\n+CBAD7 CENTRAL HEADER #55    02014B50 (33639248)\n+CBADB Created Zip Spec      14 (20) '2.0'\n+CBADC Created OS            03 (3) 'Unix'\n+CBADD Extract Zip Spec      0A (10) '1.0'\n+CBADE Extract OS            00 (0) 'MS-DOS'\n+CBADF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB563 Compression Method    0000 (0) 'Stored'\n-CB565 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB569 CRC                   00000000 (0)\n-CB56D Compressed Size       00000000 (0)\n-CB571 Uncompressed Size     00000000 (0)\n-CB575 Filename Length       0034 (52)\n-CB577 Extra Length          0000 (0)\n-CB579 Comment Length        0000 (0)\n-CB57B Disk Start            0000 (0)\n-CB57D Int File Attributes   0000 (0)\n+CBAE1 Compression Method    0000 (0) 'Stored'\n+CBAE3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBAE7 CRC                   00000000 (0)\n+CBAEB Compressed Size       00000000 (0)\n+CBAEF Uncompressed Size     00000000 (0)\n+CBAF3 Filename Length       0034 (52)\n+CBAF5 Extra Length          0000 (0)\n+CBAF7 Comment Length        0000 (0)\n+CBAF9 Disk Start            0000 (0)\n+CBAFB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB57F Ext File Attributes   41ED0010 (1106051088)\n+CBAFD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB583 Local Header Offset   00001715 (5909)\n-CB587 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBB01 Local Header Offset   00001715 (5909)\n+CBB05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB587: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBB05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB587: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBB05: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB55F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBADD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB5BB CENTRAL HEADER #56    02014B50 (33639248)\n-CB5BF Created Zip Spec      14 (20) '2.0'\n-CB5C0 Created OS            03 (3) 'Unix'\n-CB5C1 Extract Zip Spec      0A (10) '1.0'\n-CB5C2 Extract OS            00 (0) 'MS-DOS'\n-CB5C3 General Purpose Flag  0800 (2048)\n+CBB39 CENTRAL HEADER #56    02014B50 (33639248)\n+CBB3D Created Zip Spec      14 (20) '2.0'\n+CBB3E Created OS            03 (3) 'Unix'\n+CBB3F Extract Zip Spec      0A (10) '1.0'\n+CBB40 Extract OS            00 (0) 'MS-DOS'\n+CBB41 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB5C5 Compression Method    0000 (0) 'Stored'\n-CB5C7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB5CB CRC                   00000000 (0)\n-CB5CF Compressed Size       00000000 (0)\n-CB5D3 Uncompressed Size     00000000 (0)\n-CB5D7 Filename Length       003D (61)\n-CB5D9 Extra Length          0000 (0)\n-CB5DB Comment Length        0000 (0)\n-CB5DD Disk Start            0000 (0)\n-CB5DF Int File Attributes   0000 (0)\n+CBB43 Compression Method    0000 (0) 'Stored'\n+CBB45 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBB49 CRC                   00000000 (0)\n+CBB4D Compressed Size       00000000 (0)\n+CBB51 Uncompressed Size     00000000 (0)\n+CBB55 Filename Length       003D (61)\n+CBB57 Extra Length          0000 (0)\n+CBB59 Comment Length        0000 (0)\n+CBB5B Disk Start            0000 (0)\n+CBB5D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB5E1 Ext File Attributes   41ED0010 (1106051088)\n+CBB5F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB5E5 Local Header Offset   00001767 (5991)\n-CB5E9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBB63 Local Header Offset   00001767 (5991)\n+CBB67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB5E9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBB67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB5E9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBB67: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB5C1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBB3F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB626 CENTRAL HEADER #57    02014B50 (33639248)\n-CB62A Created Zip Spec      14 (20) '2.0'\n-CB62B Created OS            03 (3) 'Unix'\n-CB62C Extract Zip Spec      0A (10) '1.0'\n-CB62D Extract OS            00 (0) 'MS-DOS'\n-CB62E General Purpose Flag  0800 (2048)\n+CBBA4 CENTRAL HEADER #57    02014B50 (33639248)\n+CBBA8 Created Zip Spec      14 (20) '2.0'\n+CBBA9 Created OS            03 (3) 'Unix'\n+CBBAA Extract Zip Spec      0A (10) '1.0'\n+CBBAB Extract OS            00 (0) 'MS-DOS'\n+CBBAC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB630 Compression Method    0000 (0) 'Stored'\n-CB632 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB636 CRC                   00000000 (0)\n-CB63A Compressed Size       00000000 (0)\n-CB63E Uncompressed Size     00000000 (0)\n-CB642 Filename Length       007B (123)\n-CB644 Extra Length          0000 (0)\n-CB646 Comment Length        0000 (0)\n-CB648 Disk Start            0000 (0)\n-CB64A Int File Attributes   0000 (0)\n+CBBAE Compression Method    0000 (0) 'Stored'\n+CBBB0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBBB4 CRC                   00000000 (0)\n+CBBB8 Compressed Size       00000000 (0)\n+CBBBC Uncompressed Size     00000000 (0)\n+CBBC0 Filename Length       007B (123)\n+CBBC2 Extra Length          0000 (0)\n+CBBC4 Comment Length        0000 (0)\n+CBBC6 Disk Start            0000 (0)\n+CBBC8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB64C Ext File Attributes   41ED0010 (1106051088)\n+CBBCA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB650 Local Header Offset   000017C2 (6082)\n-CB654 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBBCE Local Header Offset   000017C2 (6082)\n+CBBD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB654: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBBD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB654: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBBD2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB62C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBBAA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB6CF CENTRAL HEADER #58    02014B50 (33639248)\n-CB6D3 Created Zip Spec      14 (20) '2.0'\n-CB6D4 Created OS            03 (3) 'Unix'\n-CB6D5 Extract Zip Spec      0A (10) '1.0'\n-CB6D6 Extract OS            00 (0) 'MS-DOS'\n-CB6D7 General Purpose Flag  0800 (2048)\n+CBC4D CENTRAL HEADER #58    02014B50 (33639248)\n+CBC51 Created Zip Spec      14 (20) '2.0'\n+CBC52 Created OS            03 (3) 'Unix'\n+CBC53 Extract Zip Spec      0A (10) '1.0'\n+CBC54 Extract OS            00 (0) 'MS-DOS'\n+CBC55 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB6D9 Compression Method    0000 (0) 'Stored'\n-CB6DB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB6DF CRC                   00000000 (0)\n-CB6E3 Compressed Size       00000000 (0)\n-CB6E7 Uncompressed Size     00000000 (0)\n-CB6EB Filename Length       0081 (129)\n-CB6ED Extra Length          0000 (0)\n-CB6EF Comment Length        0000 (0)\n-CB6F1 Disk Start            0000 (0)\n-CB6F3 Int File Attributes   0000 (0)\n+CBC57 Compression Method    0000 (0) 'Stored'\n+CBC59 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBC5D CRC                   00000000 (0)\n+CBC61 Compressed Size       00000000 (0)\n+CBC65 Uncompressed Size     00000000 (0)\n+CBC69 Filename Length       0081 (129)\n+CBC6B Extra Length          0000 (0)\n+CBC6D Comment Length        0000 (0)\n+CBC6F Disk Start            0000 (0)\n+CBC71 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB6F5 Ext File Attributes   41ED0010 (1106051088)\n+CBC73 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB6F9 Local Header Offset   0000185B (6235)\n-CB6FD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBC77 Local Header Offset   0000185B (6235)\n+CBC7B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB6FD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBC7B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB6FD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBC7B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB6D5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBC53: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB77E CENTRAL HEADER #59    02014B50 (33639248)\n-CB782 Created Zip Spec      14 (20) '2.0'\n-CB783 Created OS            03 (3) 'Unix'\n-CB784 Extract Zip Spec      0A (10) '1.0'\n-CB785 Extract OS            00 (0) 'MS-DOS'\n-CB786 General Purpose Flag  0800 (2048)\n+CBCFC CENTRAL HEADER #59    02014B50 (33639248)\n+CBD00 Created Zip Spec      14 (20) '2.0'\n+CBD01 Created OS            03 (3) 'Unix'\n+CBD02 Extract Zip Spec      0A (10) '1.0'\n+CBD03 Extract OS            00 (0) 'MS-DOS'\n+CBD04 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB788 Compression Method    0000 (0) 'Stored'\n-CB78A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB78E CRC                   00000000 (0)\n-CB792 Compressed Size       00000000 (0)\n-CB796 Uncompressed Size     00000000 (0)\n-CB79A Filename Length       007D (125)\n-CB79C Extra Length          0000 (0)\n-CB79E Comment Length        0000 (0)\n-CB7A0 Disk Start            0000 (0)\n-CB7A2 Int File Attributes   0000 (0)\n+CBD06 Compression Method    0000 (0) 'Stored'\n+CBD08 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBD0C CRC                   00000000 (0)\n+CBD10 Compressed Size       00000000 (0)\n+CBD14 Uncompressed Size     00000000 (0)\n+CBD18 Filename Length       007D (125)\n+CBD1A Extra Length          0000 (0)\n+CBD1C Comment Length        0000 (0)\n+CBD1E Disk Start            0000 (0)\n+CBD20 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB7A4 Ext File Attributes   41ED0010 (1106051088)\n+CBD22 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB7A8 Local Header Offset   000018FA (6394)\n-CB7AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBD26 Local Header Offset   000018FA (6394)\n+CBD2A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB7AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBD2A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB7AC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBD2A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB784: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBD02: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB829 CENTRAL HEADER #60    02014B50 (33639248)\n-CB82D Created Zip Spec      14 (20) '2.0'\n-CB82E Created OS            03 (3) 'Unix'\n-CB82F Extract Zip Spec      0A (10) '1.0'\n-CB830 Extract OS            00 (0) 'MS-DOS'\n-CB831 General Purpose Flag  0800 (2048)\n+CBDA7 CENTRAL HEADER #60    02014B50 (33639248)\n+CBDAB Created Zip Spec      14 (20) '2.0'\n+CBDAC Created OS            03 (3) 'Unix'\n+CBDAD Extract Zip Spec      0A (10) '1.0'\n+CBDAE Extract OS            00 (0) 'MS-DOS'\n+CBDAF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB833 Compression Method    0000 (0) 'Stored'\n-CB835 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB839 CRC                   00000000 (0)\n-CB83D Compressed Size       00000000 (0)\n-CB841 Uncompressed Size     00000000 (0)\n-CB845 Filename Length       0086 (134)\n-CB847 Extra Length          0000 (0)\n-CB849 Comment Length        0000 (0)\n-CB84B Disk Start            0000 (0)\n-CB84D Int File Attributes   0000 (0)\n+CBDB1 Compression Method    0000 (0) 'Stored'\n+CBDB3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBDB7 CRC                   00000000 (0)\n+CBDBB Compressed Size       00000000 (0)\n+CBDBF Uncompressed Size     00000000 (0)\n+CBDC3 Filename Length       0086 (134)\n+CBDC5 Extra Length          0000 (0)\n+CBDC7 Comment Length        0000 (0)\n+CBDC9 Disk Start            0000 (0)\n+CBDCB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB84F Ext File Attributes   41ED0010 (1106051088)\n+CBDCD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB853 Local Header Offset   00001995 (6549)\n-CB857 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+CBDD1 Local Header Offset   00001995 (6549)\n+CBDD5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0xCB857: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBDD5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB857: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBDD5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB82F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBDAD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB8DD CENTRAL HEADER #61    02014B50 (33639248)\n-CB8E1 Created Zip Spec      14 (20) '2.0'\n-CB8E2 Created OS            03 (3) 'Unix'\n-CB8E3 Extract Zip Spec      0A (10) '1.0'\n-CB8E4 Extract OS            00 (0) 'MS-DOS'\n-CB8E5 General Purpose Flag  0800 (2048)\n+CBE5B CENTRAL HEADER #61    02014B50 (33639248)\n+CBE5F Created Zip Spec      14 (20) '2.0'\n+CBE60 Created OS            03 (3) 'Unix'\n+CBE61 Extract Zip Spec      0A (10) '1.0'\n+CBE62 Extract OS            00 (0) 'MS-DOS'\n+CBE63 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB8E7 Compression Method    0000 (0) 'Stored'\n-CB8E9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB8ED CRC                   00000000 (0)\n-CB8F1 Compressed Size       00000000 (0)\n-CB8F5 Uncompressed Size     00000000 (0)\n-CB8F9 Filename Length       007B (123)\n-CB8FB Extra Length          0000 (0)\n-CB8FD Comment Length        0000 (0)\n-CB8FF Disk Start            0000 (0)\n-CB901 Int File Attributes   0000 (0)\n+CBE65 Compression Method    0000 (0) 'Stored'\n+CBE67 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBE6B CRC                   00000000 (0)\n+CBE6F Compressed Size       00000000 (0)\n+CBE73 Uncompressed Size     00000000 (0)\n+CBE77 Filename Length       007B (123)\n+CBE79 Extra Length          0000 (0)\n+CBE7B Comment Length        0000 (0)\n+CBE7D Disk Start            0000 (0)\n+CBE7F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB903 Ext File Attributes   41ED0010 (1106051088)\n+CBE81 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB907 Local Header Offset   00001A39 (6713)\n-CB90B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBE85 Local Header Offset   00001A39 (6713)\n+CBE89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB90B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBE89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB90B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBE89: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB8E3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBE61: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CB986 CENTRAL HEADER #62    02014B50 (33639248)\n-CB98A Created Zip Spec      14 (20) '2.0'\n-CB98B Created OS            03 (3) 'Unix'\n-CB98C Extract Zip Spec      0A (10) '1.0'\n-CB98D Extract OS            00 (0) 'MS-DOS'\n-CB98E General Purpose Flag  0800 (2048)\n+CBF04 CENTRAL HEADER #62    02014B50 (33639248)\n+CBF08 Created Zip Spec      14 (20) '2.0'\n+CBF09 Created OS            03 (3) 'Unix'\n+CBF0A Extract Zip Spec      0A (10) '1.0'\n+CBF0B Extract OS            00 (0) 'MS-DOS'\n+CBF0C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CB990 Compression Method    0000 (0) 'Stored'\n-CB992 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CB996 CRC                   00000000 (0)\n-CB99A Compressed Size       00000000 (0)\n-CB99E Uncompressed Size     00000000 (0)\n-CB9A2 Filename Length       007D (125)\n-CB9A4 Extra Length          0000 (0)\n-CB9A6 Comment Length        0000 (0)\n-CB9A8 Disk Start            0000 (0)\n-CB9AA Int File Attributes   0000 (0)\n+CBF0E Compression Method    0000 (0) 'Stored'\n+CBF10 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBF14 CRC                   00000000 (0)\n+CBF18 Compressed Size       00000000 (0)\n+CBF1C Uncompressed Size     00000000 (0)\n+CBF20 Filename Length       007D (125)\n+CBF22 Extra Length          0000 (0)\n+CBF24 Comment Length        0000 (0)\n+CBF26 Disk Start            0000 (0)\n+CBF28 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CB9AC Ext File Attributes   41ED0010 (1106051088)\n+CBF2A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CB9B0 Local Header Offset   00001AD2 (6866)\n-CB9B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBF2E Local Header Offset   00001AD2 (6866)\n+CBF32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCB9B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBF32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCB9B4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBF32: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCB98C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBF0A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBA31 CENTRAL HEADER #63    02014B50 (33639248)\n-CBA35 Created Zip Spec      14 (20) '2.0'\n-CBA36 Created OS            03 (3) 'Unix'\n-CBA37 Extract Zip Spec      0A (10) '1.0'\n-CBA38 Extract OS            00 (0) 'MS-DOS'\n-CBA39 General Purpose Flag  0800 (2048)\n+CBFAF CENTRAL HEADER #63    02014B50 (33639248)\n+CBFB3 Created Zip Spec      14 (20) '2.0'\n+CBFB4 Created OS            03 (3) 'Unix'\n+CBFB5 Extract Zip Spec      0A (10) '1.0'\n+CBFB6 Extract OS            00 (0) 'MS-DOS'\n+CBFB7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBA3B Compression Method    0000 (0) 'Stored'\n-CBA3D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBA41 CRC                   00000000 (0)\n-CBA45 Compressed Size       00000000 (0)\n-CBA49 Uncompressed Size     00000000 (0)\n-CBA4D Filename Length       007A (122)\n-CBA4F Extra Length          0000 (0)\n-CBA51 Comment Length        0000 (0)\n-CBA53 Disk Start            0000 (0)\n-CBA55 Int File Attributes   0000 (0)\n+CBFB9 Compression Method    0000 (0) 'Stored'\n+CBFBB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CBFBF CRC                   00000000 (0)\n+CBFC3 Compressed Size       00000000 (0)\n+CBFC7 Uncompressed Size     00000000 (0)\n+CBFCB Filename Length       007A (122)\n+CBFCD Extra Length          0000 (0)\n+CBFCF Comment Length        0000 (0)\n+CBFD1 Disk Start            0000 (0)\n+CBFD3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBA57 Ext File Attributes   41ED0010 (1106051088)\n+CBFD5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBA5B Local Header Offset   00001B6D (7021)\n-CBA5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CBFD9 Local Header Offset   00001B6D (7021)\n+CBFDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBA5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBFDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBA5F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCBFDD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBA37: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCBFB5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBAD9 CENTRAL HEADER #64    02014B50 (33639248)\n-CBADD Created Zip Spec      14 (20) '2.0'\n-CBADE Created OS            03 (3) 'Unix'\n-CBADF Extract Zip Spec      0A (10) '1.0'\n-CBAE0 Extract OS            00 (0) 'MS-DOS'\n-CBAE1 General Purpose Flag  0800 (2048)\n+CC057 CENTRAL HEADER #64    02014B50 (33639248)\n+CC05B Created Zip Spec      14 (20) '2.0'\n+CC05C Created OS            03 (3) 'Unix'\n+CC05D Extract Zip Spec      0A (10) '1.0'\n+CC05E Extract OS            00 (0) 'MS-DOS'\n+CC05F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBAE3 Compression Method    0000 (0) 'Stored'\n-CBAE5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBAE9 CRC                   00000000 (0)\n-CBAED Compressed Size       00000000 (0)\n-CBAF1 Uncompressed Size     00000000 (0)\n-CBAF5 Filename Length       0081 (129)\n-CBAF7 Extra Length          0000 (0)\n-CBAF9 Comment Length        0000 (0)\n-CBAFB Disk Start            0000 (0)\n-CBAFD Int File Attributes   0000 (0)\n+CC061 Compression Method    0000 (0) 'Stored'\n+CC063 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC067 CRC                   00000000 (0)\n+CC06B Compressed Size       00000000 (0)\n+CC06F Uncompressed Size     00000000 (0)\n+CC073 Filename Length       0081 (129)\n+CC075 Extra Length          0000 (0)\n+CC077 Comment Length        0000 (0)\n+CC079 Disk Start            0000 (0)\n+CC07B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBAFF Ext File Attributes   41ED0010 (1106051088)\n+CC07D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBB03 Local Header Offset   00001C05 (7173)\n-CBB07 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC081 Local Header Offset   00001C05 (7173)\n+CC085 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBB07: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC085: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBB07: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC085: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBADF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC05D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBB88 CENTRAL HEADER #65    02014B50 (33639248)\n-CBB8C Created Zip Spec      14 (20) '2.0'\n-CBB8D Created OS            03 (3) 'Unix'\n-CBB8E Extract Zip Spec      0A (10) '1.0'\n-CBB8F Extract OS            00 (0) 'MS-DOS'\n-CBB90 General Purpose Flag  0800 (2048)\n+CC106 CENTRAL HEADER #65    02014B50 (33639248)\n+CC10A Created Zip Spec      14 (20) '2.0'\n+CC10B Created OS            03 (3) 'Unix'\n+CC10C Extract Zip Spec      0A (10) '1.0'\n+CC10D Extract OS            00 (0) 'MS-DOS'\n+CC10E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBB92 Compression Method    0000 (0) 'Stored'\n-CBB94 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBB98 CRC                   00000000 (0)\n-CBB9C Compressed Size       00000000 (0)\n-CBBA0 Uncompressed Size     00000000 (0)\n-CBBA4 Filename Length       0024 (36)\n-CBBA6 Extra Length          0000 (0)\n-CBBA8 Comment Length        0000 (0)\n-CBBAA Disk Start            0000 (0)\n-CBBAC Int File Attributes   0000 (0)\n+CC110 Compression Method    0000 (0) 'Stored'\n+CC112 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC116 CRC                   00000000 (0)\n+CC11A Compressed Size       00000000 (0)\n+CC11E Uncompressed Size     00000000 (0)\n+CC122 Filename Length       0024 (36)\n+CC124 Extra Length          0000 (0)\n+CC126 Comment Length        0000 (0)\n+CC128 Disk Start            0000 (0)\n+CC12A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBBAE Ext File Attributes   41ED0010 (1106051088)\n+CC12C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBBB2 Local Header Offset   00001CA4 (7332)\n-CBBB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC130 Local Header Offset   00001CA4 (7332)\n+CC134 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBBB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC134: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBBB6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC134: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBB8E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC10C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBBDA CENTRAL HEADER #66    02014B50 (33639248)\n-CBBDE Created Zip Spec      14 (20) '2.0'\n-CBBDF Created OS            03 (3) 'Unix'\n-CBBE0 Extract Zip Spec      0A (10) '1.0'\n-CBBE1 Extract OS            00 (0) 'MS-DOS'\n-CBBE2 General Purpose Flag  0800 (2048)\n+CC158 CENTRAL HEADER #66    02014B50 (33639248)\n+CC15C Created Zip Spec      14 (20) '2.0'\n+CC15D Created OS            03 (3) 'Unix'\n+CC15E Extract Zip Spec      0A (10) '1.0'\n+CC15F Extract OS            00 (0) 'MS-DOS'\n+CC160 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBBE4 Compression Method    0000 (0) 'Stored'\n-CBBE6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBBEA CRC                   00000000 (0)\n-CBBEE Compressed Size       00000000 (0)\n-CBBF2 Uncompressed Size     00000000 (0)\n-CBBF6 Filename Length       002D (45)\n-CBBF8 Extra Length          0000 (0)\n-CBBFA Comment Length        0000 (0)\n-CBBFC Disk Start            0000 (0)\n-CBBFE Int File Attributes   0000 (0)\n+CC162 Compression Method    0000 (0) 'Stored'\n+CC164 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC168 CRC                   00000000 (0)\n+CC16C Compressed Size       00000000 (0)\n+CC170 Uncompressed Size     00000000 (0)\n+CC174 Filename Length       002D (45)\n+CC176 Extra Length          0000 (0)\n+CC178 Comment Length        0000 (0)\n+CC17A Disk Start            0000 (0)\n+CC17C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBC00 Ext File Attributes   41ED0010 (1106051088)\n+CC17E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBC04 Local Header Offset   00001CE6 (7398)\n-CBC08 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC182 Local Header Offset   00001CE6 (7398)\n+CC186 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBC08: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC186: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBC08: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC186: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBBE0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC15E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBC35 CENTRAL HEADER #67    02014B50 (33639248)\n-CBC39 Created Zip Spec      14 (20) '2.0'\n-CBC3A Created OS            03 (3) 'Unix'\n-CBC3B Extract Zip Spec      0A (10) '1.0'\n-CBC3C Extract OS            00 (0) 'MS-DOS'\n-CBC3D General Purpose Flag  0800 (2048)\n+CC1B3 CENTRAL HEADER #67    02014B50 (33639248)\n+CC1B7 Created Zip Spec      14 (20) '2.0'\n+CC1B8 Created OS            03 (3) 'Unix'\n+CC1B9 Extract Zip Spec      0A (10) '1.0'\n+CC1BA Extract OS            00 (0) 'MS-DOS'\n+CC1BB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBC3F Compression Method    0000 (0) 'Stored'\n-CBC41 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBC45 CRC                   00000000 (0)\n-CBC49 Compressed Size       00000000 (0)\n-CBC4D Uncompressed Size     00000000 (0)\n-CBC51 Filename Length       005A (90)\n-CBC53 Extra Length          0000 (0)\n-CBC55 Comment Length        0000 (0)\n-CBC57 Disk Start            0000 (0)\n-CBC59 Int File Attributes   0000 (0)\n+CC1BD Compression Method    0000 (0) 'Stored'\n+CC1BF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC1C3 CRC                   00000000 (0)\n+CC1C7 Compressed Size       00000000 (0)\n+CC1CB Uncompressed Size     00000000 (0)\n+CC1CF Filename Length       005A (90)\n+CC1D1 Extra Length          0000 (0)\n+CC1D3 Comment Length        0000 (0)\n+CC1D5 Disk Start            0000 (0)\n+CC1D7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBC5B Ext File Attributes   41ED0010 (1106051088)\n+CC1D9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBC5F Local Header Offset   00001D31 (7473)\n-CBC63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC1DD Local Header Offset   00001D31 (7473)\n+CC1E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBC63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC1E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBC63: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC1E1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBC3B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC1B9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBCBD CENTRAL HEADER #68    02014B50 (33639248)\n-CBCC1 Created Zip Spec      14 (20) '2.0'\n-CBCC2 Created OS            03 (3) 'Unix'\n-CBCC3 Extract Zip Spec      0A (10) '1.0'\n-CBCC4 Extract OS            00 (0) 'MS-DOS'\n-CBCC5 General Purpose Flag  0800 (2048)\n+CC23B CENTRAL HEADER #68    02014B50 (33639248)\n+CC23F Created Zip Spec      14 (20) '2.0'\n+CC240 Created OS            03 (3) 'Unix'\n+CC241 Extract Zip Spec      0A (10) '1.0'\n+CC242 Extract OS            00 (0) 'MS-DOS'\n+CC243 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBCC7 Compression Method    0000 (0) 'Stored'\n-CBCC9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBCCD CRC                   00000000 (0)\n-CBCD1 Compressed Size       00000000 (0)\n-CBCD5 Uncompressed Size     00000000 (0)\n-CBCD9 Filename Length       005A (90)\n-CBCDB Extra Length          0000 (0)\n-CBCDD Comment Length        0000 (0)\n-CBCDF Disk Start            0000 (0)\n-CBCE1 Int File Attributes   0000 (0)\n+CC245 Compression Method    0000 (0) 'Stored'\n+CC247 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC24B CRC                   00000000 (0)\n+CC24F Compressed Size       00000000 (0)\n+CC253 Uncompressed Size     00000000 (0)\n+CC257 Filename Length       005A (90)\n+CC259 Extra Length          0000 (0)\n+CC25B Comment Length        0000 (0)\n+CC25D Disk Start            0000 (0)\n+CC25F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBCE3 Ext File Attributes   41ED0010 (1106051088)\n+CC261 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBCE7 Local Header Offset   00001DA9 (7593)\n-CBCEB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC265 Local Header Offset   00001DA9 (7593)\n+CC269 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBCEB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC269: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBCEB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC269: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBCC3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC241: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBD45 CENTRAL HEADER #69    02014B50 (33639248)\n-CBD49 Created Zip Spec      14 (20) '2.0'\n-CBD4A Created OS            03 (3) 'Unix'\n-CBD4B Extract Zip Spec      0A (10) '1.0'\n-CBD4C Extract OS            00 (0) 'MS-DOS'\n-CBD4D General Purpose Flag  0800 (2048)\n+CC2C3 CENTRAL HEADER #69    02014B50 (33639248)\n+CC2C7 Created Zip Spec      14 (20) '2.0'\n+CC2C8 Created OS            03 (3) 'Unix'\n+CC2C9 Extract Zip Spec      0A (10) '1.0'\n+CC2CA Extract OS            00 (0) 'MS-DOS'\n+CC2CB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBD4F Compression Method    0000 (0) 'Stored'\n-CBD51 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBD55 CRC                   00000000 (0)\n-CBD59 Compressed Size       00000000 (0)\n-CBD5D Uncompressed Size     00000000 (0)\n-CBD61 Filename Length       0023 (35)\n-CBD63 Extra Length          0000 (0)\n-CBD65 Comment Length        0000 (0)\n-CBD67 Disk Start            0000 (0)\n-CBD69 Int File Attributes   0000 (0)\n+CC2CD Compression Method    0000 (0) 'Stored'\n+CC2CF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC2D3 CRC                   00000000 (0)\n+CC2D7 Compressed Size       00000000 (0)\n+CC2DB Uncompressed Size     00000000 (0)\n+CC2DF Filename Length       0023 (35)\n+CC2E1 Extra Length          0000 (0)\n+CC2E3 Comment Length        0000 (0)\n+CC2E5 Disk Start            0000 (0)\n+CC2E7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBD6B Ext File Attributes   41ED0010 (1106051088)\n+CC2E9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBD6F Local Header Offset   00001E21 (7713)\n-CBD73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC2ED Local Header Offset   00001E21 (7713)\n+CC2F1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBD73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC2F1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBD73: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC2F1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBD4B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC2C9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBD96 CENTRAL HEADER #70    02014B50 (33639248)\n-CBD9A Created Zip Spec      14 (20) '2.0'\n-CBD9B Created OS            03 (3) 'Unix'\n-CBD9C Extract Zip Spec      0A (10) '1.0'\n-CBD9D Extract OS            00 (0) 'MS-DOS'\n-CBD9E General Purpose Flag  0800 (2048)\n+CC314 CENTRAL HEADER #70    02014B50 (33639248)\n+CC318 Created Zip Spec      14 (20) '2.0'\n+CC319 Created OS            03 (3) 'Unix'\n+CC31A Extract Zip Spec      0A (10) '1.0'\n+CC31B Extract OS            00 (0) 'MS-DOS'\n+CC31C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBDA0 Compression Method    0000 (0) 'Stored'\n-CBDA2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBDA6 CRC                   00000000 (0)\n-CBDAA Compressed Size       00000000 (0)\n-CBDAE Uncompressed Size     00000000 (0)\n-CBDB2 Filename Length       002C (44)\n-CBDB4 Extra Length          0000 (0)\n-CBDB6 Comment Length        0000 (0)\n-CBDB8 Disk Start            0000 (0)\n-CBDBA Int File Attributes   0000 (0)\n+CC31E Compression Method    0000 (0) 'Stored'\n+CC320 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC324 CRC                   00000000 (0)\n+CC328 Compressed Size       00000000 (0)\n+CC32C Uncompressed Size     00000000 (0)\n+CC330 Filename Length       002C (44)\n+CC332 Extra Length          0000 (0)\n+CC334 Comment Length        0000 (0)\n+CC336 Disk Start            0000 (0)\n+CC338 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBDBC Ext File Attributes   41ED0010 (1106051088)\n+CC33A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBDC0 Local Header Offset   00001E62 (7778)\n-CBDC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC33E Local Header Offset   00001E62 (7778)\n+CC342 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBDC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC342: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBDC4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC342: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBD9C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC31A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBDF0 CENTRAL HEADER #71    02014B50 (33639248)\n-CBDF4 Created Zip Spec      14 (20) '2.0'\n-CBDF5 Created OS            03 (3) 'Unix'\n-CBDF6 Extract Zip Spec      0A (10) '1.0'\n-CBDF7 Extract OS            00 (0) 'MS-DOS'\n-CBDF8 General Purpose Flag  0800 (2048)\n+CC36E CENTRAL HEADER #71    02014B50 (33639248)\n+CC372 Created Zip Spec      14 (20) '2.0'\n+CC373 Created OS            03 (3) 'Unix'\n+CC374 Extract Zip Spec      0A (10) '1.0'\n+CC375 Extract OS            00 (0) 'MS-DOS'\n+CC376 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBDFA Compression Method    0000 (0) 'Stored'\n-CBDFC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBE00 CRC                   00000000 (0)\n-CBE04 Compressed Size       00000000 (0)\n-CBE08 Uncompressed Size     00000000 (0)\n-CBE0C Filename Length       0056 (86)\n-CBE0E Extra Length          0000 (0)\n-CBE10 Comment Length        0000 (0)\n-CBE12 Disk Start            0000 (0)\n-CBE14 Int File Attributes   0000 (0)\n+CC378 Compression Method    0000 (0) 'Stored'\n+CC37A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC37E CRC                   00000000 (0)\n+CC382 Compressed Size       00000000 (0)\n+CC386 Uncompressed Size     00000000 (0)\n+CC38A Filename Length       0056 (86)\n+CC38C Extra Length          0000 (0)\n+CC38E Comment Length        0000 (0)\n+CC390 Disk Start            0000 (0)\n+CC392 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBE16 Ext File Attributes   41ED0010 (1106051088)\n+CC394 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBE1A Local Header Offset   00001EAC (7852)\n-CBE1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC398 Local Header Offset   00001EAC (7852)\n+CC39C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBE1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC39C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBE1E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC39C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBDF6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC374: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBE74 CENTRAL HEADER #72    02014B50 (33639248)\n-CBE78 Created Zip Spec      14 (20) '2.0'\n-CBE79 Created OS            03 (3) 'Unix'\n-CBE7A Extract Zip Spec      0A (10) '1.0'\n-CBE7B Extract OS            00 (0) 'MS-DOS'\n-CBE7C General Purpose Flag  0800 (2048)\n+CC3F2 CENTRAL HEADER #72    02014B50 (33639248)\n+CC3F6 Created Zip Spec      14 (20) '2.0'\n+CC3F7 Created OS            03 (3) 'Unix'\n+CC3F8 Extract Zip Spec      0A (10) '1.0'\n+CC3F9 Extract OS            00 (0) 'MS-DOS'\n+CC3FA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBE7E Compression Method    0000 (0) 'Stored'\n-CBE80 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBE84 CRC                   00000000 (0)\n-CBE88 Compressed Size       00000000 (0)\n-CBE8C Uncompressed Size     00000000 (0)\n-CBE90 Filename Length       0022 (34)\n-CBE92 Extra Length          0000 (0)\n-CBE94 Comment Length        0000 (0)\n-CBE96 Disk Start            0000 (0)\n-CBE98 Int File Attributes   0000 (0)\n+CC3FC Compression Method    0000 (0) 'Stored'\n+CC3FE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC402 CRC                   00000000 (0)\n+CC406 Compressed Size       00000000 (0)\n+CC40A Uncompressed Size     00000000 (0)\n+CC40E Filename Length       0022 (34)\n+CC410 Extra Length          0000 (0)\n+CC412 Comment Length        0000 (0)\n+CC414 Disk Start            0000 (0)\n+CC416 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBE9A Ext File Attributes   41ED0010 (1106051088)\n+CC418 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBE9E Local Header Offset   00001F20 (7968)\n-CBEA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC41C Local Header Offset   00001F20 (7968)\n+CC420 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBEA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC420: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBEA2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC420: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBE7A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC3F8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBEC4 CENTRAL HEADER #73    02014B50 (33639248)\n-CBEC8 Created Zip Spec      14 (20) '2.0'\n-CBEC9 Created OS            03 (3) 'Unix'\n-CBECA Extract Zip Spec      0A (10) '1.0'\n-CBECB Extract OS            00 (0) 'MS-DOS'\n-CBECC General Purpose Flag  0800 (2048)\n+CC442 CENTRAL HEADER #73    02014B50 (33639248)\n+CC446 Created Zip Spec      14 (20) '2.0'\n+CC447 Created OS            03 (3) 'Unix'\n+CC448 Extract Zip Spec      0A (10) '1.0'\n+CC449 Extract OS            00 (0) 'MS-DOS'\n+CC44A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBECE Compression Method    0000 (0) 'Stored'\n-CBED0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBED4 CRC                   00000000 (0)\n-CBED8 Compressed Size       00000000 (0)\n-CBEDC Uncompressed Size     00000000 (0)\n-CBEE0 Filename Length       002B (43)\n-CBEE2 Extra Length          0000 (0)\n-CBEE4 Comment Length        0000 (0)\n-CBEE6 Disk Start            0000 (0)\n-CBEE8 Int File Attributes   0000 (0)\n+CC44C Compression Method    0000 (0) 'Stored'\n+CC44E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC452 CRC                   00000000 (0)\n+CC456 Compressed Size       00000000 (0)\n+CC45A Uncompressed Size     00000000 (0)\n+CC45E Filename Length       002B (43)\n+CC460 Extra Length          0000 (0)\n+CC462 Comment Length        0000 (0)\n+CC464 Disk Start            0000 (0)\n+CC466 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBEEA Ext File Attributes   41ED0010 (1106051088)\n+CC468 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBEEE Local Header Offset   00001F60 (8032)\n-CBEF2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC46C Local Header Offset   00001F60 (8032)\n+CC470 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBEF2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC470: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBEF2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC470: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBECA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC448: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBF1D CENTRAL HEADER #74    02014B50 (33639248)\n-CBF21 Created Zip Spec      14 (20) '2.0'\n-CBF22 Created OS            03 (3) 'Unix'\n-CBF23 Extract Zip Spec      0A (10) '1.0'\n-CBF24 Extract OS            00 (0) 'MS-DOS'\n-CBF25 General Purpose Flag  0800 (2048)\n+CC49B CENTRAL HEADER #74    02014B50 (33639248)\n+CC49F Created Zip Spec      14 (20) '2.0'\n+CC4A0 Created OS            03 (3) 'Unix'\n+CC4A1 Extract Zip Spec      0A (10) '1.0'\n+CC4A2 Extract OS            00 (0) 'MS-DOS'\n+CC4A3 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBF27 Compression Method    0000 (0) 'Stored'\n-CBF29 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBF2D CRC                   00000000 (0)\n-CBF31 Compressed Size       00000000 (0)\n-CBF35 Uncompressed Size     00000000 (0)\n-CBF39 Filename Length       006B (107)\n-CBF3B Extra Length          0000 (0)\n-CBF3D Comment Length        0000 (0)\n-CBF3F Disk Start            0000 (0)\n-CBF41 Int File Attributes   0000 (0)\n+CC4A5 Compression Method    0000 (0) 'Stored'\n+CC4A7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC4AB CRC                   00000000 (0)\n+CC4AF Compressed Size       00000000 (0)\n+CC4B3 Uncompressed Size     00000000 (0)\n+CC4B7 Filename Length       006B (107)\n+CC4B9 Extra Length          0000 (0)\n+CC4BB Comment Length        0000 (0)\n+CC4BD Disk Start            0000 (0)\n+CC4BF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBF43 Ext File Attributes   41ED0010 (1106051088)\n+CC4C1 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBF47 Local Header Offset   00001FA9 (8105)\n-CBF4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC4C5 Local Header Offset   00001FA9 (8105)\n+CC4C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBF4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC4C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBF4B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC4C9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBF23: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC4A1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CBFB6 CENTRAL HEADER #75    02014B50 (33639248)\n-CBFBA Created Zip Spec      14 (20) '2.0'\n-CBFBB Created OS            03 (3) 'Unix'\n-CBFBC Extract Zip Spec      0A (10) '1.0'\n-CBFBD Extract OS            00 (0) 'MS-DOS'\n-CBFBE General Purpose Flag  0800 (2048)\n+CC534 CENTRAL HEADER #75    02014B50 (33639248)\n+CC538 Created Zip Spec      14 (20) '2.0'\n+CC539 Created OS            03 (3) 'Unix'\n+CC53A Extract Zip Spec      0A (10) '1.0'\n+CC53B Extract OS            00 (0) 'MS-DOS'\n+CC53C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CBFC0 Compression Method    0000 (0) 'Stored'\n-CBFC2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CBFC6 CRC                   00000000 (0)\n-CBFCA Compressed Size       00000000 (0)\n-CBFCE Uncompressed Size     00000000 (0)\n-CBFD2 Filename Length       005F (95)\n-CBFD4 Extra Length          0000 (0)\n-CBFD6 Comment Length        0000 (0)\n-CBFD8 Disk Start            0000 (0)\n-CBFDA Int File Attributes   0000 (0)\n+CC53E Compression Method    0000 (0) 'Stored'\n+CC540 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC544 CRC                   00000000 (0)\n+CC548 Compressed Size       00000000 (0)\n+CC54C Uncompressed Size     00000000 (0)\n+CC550 Filename Length       005F (95)\n+CC552 Extra Length          0000 (0)\n+CC554 Comment Length        0000 (0)\n+CC556 Disk Start            0000 (0)\n+CC558 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CBFDC Ext File Attributes   41ED0010 (1106051088)\n+CC55A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CBFE0 Local Header Offset   00002032 (8242)\n-CBFE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC55E Local Header Offset   00002032 (8242)\n+CC562 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCBFE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC562: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCBFE4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC562: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCBFBC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC53A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC043 CENTRAL HEADER #76    02014B50 (33639248)\n-CC047 Created Zip Spec      14 (20) '2.0'\n-CC048 Created OS            03 (3) 'Unix'\n-CC049 Extract Zip Spec      0A (10) '1.0'\n-CC04A Extract OS            00 (0) 'MS-DOS'\n-CC04B General Purpose Flag  0800 (2048)\n+CC5C1 CENTRAL HEADER #76    02014B50 (33639248)\n+CC5C5 Created Zip Spec      14 (20) '2.0'\n+CC5C6 Created OS            03 (3) 'Unix'\n+CC5C7 Extract Zip Spec      0A (10) '1.0'\n+CC5C8 Extract OS            00 (0) 'MS-DOS'\n+CC5C9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC04D Compression Method    0000 (0) 'Stored'\n-CC04F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC053 CRC                   00000000 (0)\n-CC057 Compressed Size       00000000 (0)\n-CC05B Uncompressed Size     00000000 (0)\n-CC05F Filename Length       0061 (97)\n-CC061 Extra Length          0000 (0)\n-CC063 Comment Length        0000 (0)\n-CC065 Disk Start            0000 (0)\n-CC067 Int File Attributes   0000 (0)\n+CC5CB Compression Method    0000 (0) 'Stored'\n+CC5CD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC5D1 CRC                   00000000 (0)\n+CC5D5 Compressed Size       00000000 (0)\n+CC5D9 Uncompressed Size     00000000 (0)\n+CC5DD Filename Length       0061 (97)\n+CC5DF Extra Length          0000 (0)\n+CC5E1 Comment Length        0000 (0)\n+CC5E3 Disk Start            0000 (0)\n+CC5E5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC069 Ext File Attributes   41ED0010 (1106051088)\n+CC5E7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC06D Local Header Offset   000020AF (8367)\n-CC071 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC5EB Local Header Offset   000020AF (8367)\n+CC5EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC071: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC5EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC071: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC5EF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC049: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC5C7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC0D2 CENTRAL HEADER #77    02014B50 (33639248)\n-CC0D6 Created Zip Spec      14 (20) '2.0'\n-CC0D7 Created OS            03 (3) 'Unix'\n-CC0D8 Extract Zip Spec      0A (10) '1.0'\n-CC0D9 Extract OS            00 (0) 'MS-DOS'\n-CC0DA General Purpose Flag  0800 (2048)\n+CC650 CENTRAL HEADER #77    02014B50 (33639248)\n+CC654 Created Zip Spec      14 (20) '2.0'\n+CC655 Created OS            03 (3) 'Unix'\n+CC656 Extract Zip Spec      0A (10) '1.0'\n+CC657 Extract OS            00 (0) 'MS-DOS'\n+CC658 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC0DC Compression Method    0000 (0) 'Stored'\n-CC0DE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC0E2 CRC                   00000000 (0)\n-CC0E6 Compressed Size       00000000 (0)\n-CC0EA Uncompressed Size     00000000 (0)\n-CC0EE Filename Length       0060 (96)\n-CC0F0 Extra Length          0000 (0)\n-CC0F2 Comment Length        0000 (0)\n-CC0F4 Disk Start            0000 (0)\n-CC0F6 Int File Attributes   0000 (0)\n+CC65A Compression Method    0000 (0) 'Stored'\n+CC65C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC660 CRC                   00000000 (0)\n+CC664 Compressed Size       00000000 (0)\n+CC668 Uncompressed Size     00000000 (0)\n+CC66C Filename Length       0060 (96)\n+CC66E Extra Length          0000 (0)\n+CC670 Comment Length        0000 (0)\n+CC672 Disk Start            0000 (0)\n+CC674 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC0F8 Ext File Attributes   41ED0010 (1106051088)\n+CC676 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC0FC Local Header Offset   0000212E (8494)\n-CC100 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC67A Local Header Offset   0000212E (8494)\n+CC67E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC100: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC67E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC100: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC67E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC0D8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC656: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC160 CENTRAL HEADER #78    02014B50 (33639248)\n-CC164 Created Zip Spec      14 (20) '2.0'\n-CC165 Created OS            03 (3) 'Unix'\n-CC166 Extract Zip Spec      0A (10) '1.0'\n-CC167 Extract OS            00 (0) 'MS-DOS'\n-CC168 General Purpose Flag  0800 (2048)\n+CC6DE CENTRAL HEADER #78    02014B50 (33639248)\n+CC6E2 Created Zip Spec      14 (20) '2.0'\n+CC6E3 Created OS            03 (3) 'Unix'\n+CC6E4 Extract Zip Spec      0A (10) '1.0'\n+CC6E5 Extract OS            00 (0) 'MS-DOS'\n+CC6E6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC16A Compression Method    0000 (0) 'Stored'\n-CC16C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC170 CRC                   00000000 (0)\n-CC174 Compressed Size       00000000 (0)\n-CC178 Uncompressed Size     00000000 (0)\n-CC17C Filename Length       005F (95)\n-CC17E Extra Length          0000 (0)\n-CC180 Comment Length        0000 (0)\n-CC182 Disk Start            0000 (0)\n-CC184 Int File Attributes   0000 (0)\n+CC6E8 Compression Method    0000 (0) 'Stored'\n+CC6EA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC6EE CRC                   00000000 (0)\n+CC6F2 Compressed Size       00000000 (0)\n+CC6F6 Uncompressed Size     00000000 (0)\n+CC6FA Filename Length       005F (95)\n+CC6FC Extra Length          0000 (0)\n+CC6FE Comment Length        0000 (0)\n+CC700 Disk Start            0000 (0)\n+CC702 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC186 Ext File Attributes   41ED0010 (1106051088)\n+CC704 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC18A Local Header Offset   000021AC (8620)\n-CC18E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC708 Local Header Offset   000021AC (8620)\n+CC70C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC18E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC70C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC18E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC70C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC166: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC6E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC1ED CENTRAL HEADER #79    02014B50 (33639248)\n-CC1F1 Created Zip Spec      14 (20) '2.0'\n-CC1F2 Created OS            03 (3) 'Unix'\n-CC1F3 Extract Zip Spec      0A (10) '1.0'\n-CC1F4 Extract OS            00 (0) 'MS-DOS'\n-CC1F5 General Purpose Flag  0800 (2048)\n+CC76B CENTRAL HEADER #79    02014B50 (33639248)\n+CC76F Created Zip Spec      14 (20) '2.0'\n+CC770 Created OS            03 (3) 'Unix'\n+CC771 Extract Zip Spec      0A (10) '1.0'\n+CC772 Extract OS            00 (0) 'MS-DOS'\n+CC773 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC1F7 Compression Method    0000 (0) 'Stored'\n-CC1F9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC1FD CRC                   00000000 (0)\n-CC201 Compressed Size       00000000 (0)\n-CC205 Uncompressed Size     00000000 (0)\n-CC209 Filename Length       0060 (96)\n-CC20B Extra Length          0000 (0)\n-CC20D Comment Length        0000 (0)\n-CC20F Disk Start            0000 (0)\n-CC211 Int File Attributes   0000 (0)\n+CC775 Compression Method    0000 (0) 'Stored'\n+CC777 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC77B CRC                   00000000 (0)\n+CC77F Compressed Size       00000000 (0)\n+CC783 Uncompressed Size     00000000 (0)\n+CC787 Filename Length       0060 (96)\n+CC789 Extra Length          0000 (0)\n+CC78B Comment Length        0000 (0)\n+CC78D Disk Start            0000 (0)\n+CC78F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC213 Ext File Attributes   41ED0010 (1106051088)\n+CC791 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC217 Local Header Offset   00002229 (8745)\n-CC21B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC795 Local Header Offset   00002229 (8745)\n+CC799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC21B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC21B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC799: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC1F3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC771: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC27B CENTRAL HEADER #80    02014B50 (33639248)\n-CC27F Created Zip Spec      14 (20) '2.0'\n-CC280 Created OS            03 (3) 'Unix'\n-CC281 Extract Zip Spec      0A (10) '1.0'\n-CC282 Extract OS            00 (0) 'MS-DOS'\n-CC283 General Purpose Flag  0800 (2048)\n+CC7F9 CENTRAL HEADER #80    02014B50 (33639248)\n+CC7FD Created Zip Spec      14 (20) '2.0'\n+CC7FE Created OS            03 (3) 'Unix'\n+CC7FF Extract Zip Spec      0A (10) '1.0'\n+CC800 Extract OS            00 (0) 'MS-DOS'\n+CC801 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC285 Compression Method    0000 (0) 'Stored'\n-CC287 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC28B CRC                   00000000 (0)\n-CC28F Compressed Size       00000000 (0)\n-CC293 Uncompressed Size     00000000 (0)\n-CC297 Filename Length       007A (122)\n-CC299 Extra Length          0000 (0)\n-CC29B Comment Length        0000 (0)\n-CC29D Disk Start            0000 (0)\n-CC29F Int File Attributes   0000 (0)\n+CC803 Compression Method    0000 (0) 'Stored'\n+CC805 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC809 CRC                   00000000 (0)\n+CC80D Compressed Size       00000000 (0)\n+CC811 Uncompressed Size     00000000 (0)\n+CC815 Filename Length       007A (122)\n+CC817 Extra Length          0000 (0)\n+CC819 Comment Length        0000 (0)\n+CC81B Disk Start            0000 (0)\n+CC81D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC2A1 Ext File Attributes   41ED0010 (1106051088)\n+CC81F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC2A5 Local Header Offset   000022A7 (8871)\n-CC2A9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC823 Local Header Offset   000022A7 (8871)\n+CC827 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC2A9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC827: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC2A9: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC827: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC281: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC7FF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC323 CENTRAL HEADER #81    02014B50 (33639248)\n-CC327 Created Zip Spec      14 (20) '2.0'\n-CC328 Created OS            03 (3) 'Unix'\n-CC329 Extract Zip Spec      0A (10) '1.0'\n-CC32A Extract OS            00 (0) 'MS-DOS'\n-CC32B General Purpose Flag  0800 (2048)\n+CC8A1 CENTRAL HEADER #81    02014B50 (33639248)\n+CC8A5 Created Zip Spec      14 (20) '2.0'\n+CC8A6 Created OS            03 (3) 'Unix'\n+CC8A7 Extract Zip Spec      0A (10) '1.0'\n+CC8A8 Extract OS            00 (0) 'MS-DOS'\n+CC8A9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC32D Compression Method    0000 (0) 'Stored'\n-CC32F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC333 CRC                   00000000 (0)\n-CC337 Compressed Size       00000000 (0)\n-CC33B Uncompressed Size     00000000 (0)\n-CC33F Filename Length       007B (123)\n-CC341 Extra Length          0000 (0)\n-CC343 Comment Length        0000 (0)\n-CC345 Disk Start            0000 (0)\n-CC347 Int File Attributes   0000 (0)\n+CC8AB Compression Method    0000 (0) 'Stored'\n+CC8AD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC8B1 CRC                   00000000 (0)\n+CC8B5 Compressed Size       00000000 (0)\n+CC8B9 Uncompressed Size     00000000 (0)\n+CC8BD Filename Length       007B (123)\n+CC8BF Extra Length          0000 (0)\n+CC8C1 Comment Length        0000 (0)\n+CC8C3 Disk Start            0000 (0)\n+CC8C5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC349 Ext File Attributes   41ED0010 (1106051088)\n+CC8C7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC34D Local Header Offset   0000233F (9023)\n-CC351 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC8CB Local Header Offset   0000233F (9023)\n+CC8CF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC351: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC8CF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC351: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC8CF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC329: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC8A7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC3CC CENTRAL HEADER #82    02014B50 (33639248)\n-CC3D0 Created Zip Spec      14 (20) '2.0'\n-CC3D1 Created OS            03 (3) 'Unix'\n-CC3D2 Extract Zip Spec      0A (10) '1.0'\n-CC3D3 Extract OS            00 (0) 'MS-DOS'\n-CC3D4 General Purpose Flag  0800 (2048)\n+CC94A CENTRAL HEADER #82    02014B50 (33639248)\n+CC94E Created Zip Spec      14 (20) '2.0'\n+CC94F Created OS            03 (3) 'Unix'\n+CC950 Extract Zip Spec      0A (10) '1.0'\n+CC951 Extract OS            00 (0) 'MS-DOS'\n+CC952 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC3D6 Compression Method    0000 (0) 'Stored'\n-CC3D8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC3DC CRC                   00000000 (0)\n-CC3E0 Compressed Size       00000000 (0)\n-CC3E4 Uncompressed Size     00000000 (0)\n-CC3E8 Filename Length       0076 (118)\n-CC3EA Extra Length          0000 (0)\n-CC3EC Comment Length        0000 (0)\n-CC3EE Disk Start            0000 (0)\n-CC3F0 Int File Attributes   0000 (0)\n+CC954 Compression Method    0000 (0) 'Stored'\n+CC956 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC95A CRC                   00000000 (0)\n+CC95E Compressed Size       00000000 (0)\n+CC962 Uncompressed Size     00000000 (0)\n+CC966 Filename Length       0076 (118)\n+CC968 Extra Length          0000 (0)\n+CC96A Comment Length        0000 (0)\n+CC96C Disk Start            0000 (0)\n+CC96E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC3F2 Ext File Attributes   41ED0010 (1106051088)\n+CC970 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC3F6 Local Header Offset   000023D8 (9176)\n-CC3FA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CC974 Local Header Offset   000023D8 (9176)\n+CC978 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC3FA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC978: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC3FA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCC978: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC3D2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC950: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC470 CENTRAL HEADER #83    02014B50 (33639248)\n-CC474 Created Zip Spec      14 (20) '2.0'\n-CC475 Created OS            03 (3) 'Unix'\n-CC476 Extract Zip Spec      0A (10) '1.0'\n-CC477 Extract OS            00 (0) 'MS-DOS'\n-CC478 General Purpose Flag  0800 (2048)\n+CC9EE CENTRAL HEADER #83    02014B50 (33639248)\n+CC9F2 Created Zip Spec      14 (20) '2.0'\n+CC9F3 Created OS            03 (3) 'Unix'\n+CC9F4 Extract Zip Spec      0A (10) '1.0'\n+CC9F5 Extract OS            00 (0) 'MS-DOS'\n+CC9F6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC47A Compression Method    0000 (0) 'Stored'\n-CC47C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC480 CRC                   00000000 (0)\n-CC484 Compressed Size       00000000 (0)\n-CC488 Uncompressed Size     00000000 (0)\n-CC48C Filename Length       0077 (119)\n-CC48E Extra Length          0000 (0)\n-CC490 Comment Length        0000 (0)\n-CC492 Disk Start            0000 (0)\n-CC494 Int File Attributes   0000 (0)\n+CC9F8 Compression Method    0000 (0) 'Stored'\n+CC9FA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CC9FE CRC                   00000000 (0)\n+CCA02 Compressed Size       00000000 (0)\n+CCA06 Uncompressed Size     00000000 (0)\n+CCA0A Filename Length       0077 (119)\n+CCA0C Extra Length          0000 (0)\n+CCA0E Comment Length        0000 (0)\n+CCA10 Disk Start            0000 (0)\n+CCA12 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC496 Ext File Attributes   41ED0010 (1106051088)\n+CCA14 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC49A Local Header Offset   0000246C (9324)\n-CC49E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCA18 Local Header Offset   0000246C (9324)\n+CCA1C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC49E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCA1C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC49E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCA1C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC476: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCC9F4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC515 CENTRAL HEADER #84    02014B50 (33639248)\n-CC519 Created Zip Spec      14 (20) '2.0'\n-CC51A Created OS            03 (3) 'Unix'\n-CC51B Extract Zip Spec      0A (10) '1.0'\n-CC51C Extract OS            00 (0) 'MS-DOS'\n-CC51D General Purpose Flag  0800 (2048)\n+CCA93 CENTRAL HEADER #84    02014B50 (33639248)\n+CCA97 Created Zip Spec      14 (20) '2.0'\n+CCA98 Created OS            03 (3) 'Unix'\n+CCA99 Extract Zip Spec      0A (10) '1.0'\n+CCA9A Extract OS            00 (0) 'MS-DOS'\n+CCA9B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC51F Compression Method    0000 (0) 'Stored'\n-CC521 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC525 CRC                   00000000 (0)\n-CC529 Compressed Size       00000000 (0)\n-CC52D Uncompressed Size     00000000 (0)\n-CC531 Filename Length       0026 (38)\n-CC533 Extra Length          0000 (0)\n-CC535 Comment Length        0000 (0)\n-CC537 Disk Start            0000 (0)\n-CC539 Int File Attributes   0000 (0)\n+CCA9D Compression Method    0000 (0) 'Stored'\n+CCA9F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCAA3 CRC                   00000000 (0)\n+CCAA7 Compressed Size       00000000 (0)\n+CCAAB Uncompressed Size     00000000 (0)\n+CCAAF Filename Length       0026 (38)\n+CCAB1 Extra Length          0000 (0)\n+CCAB3 Comment Length        0000 (0)\n+CCAB5 Disk Start            0000 (0)\n+CCAB7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC53B Ext File Attributes   41ED0010 (1106051088)\n+CCAB9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC53F Local Header Offset   00002501 (9473)\n-CC543 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCABD Local Header Offset   00002501 (9473)\n+CCAC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC543: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCAC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC543: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCAC1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC51B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCA99: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC569 CENTRAL HEADER #85    02014B50 (33639248)\n-CC56D Created Zip Spec      14 (20) '2.0'\n-CC56E Created OS            03 (3) 'Unix'\n-CC56F Extract Zip Spec      0A (10) '1.0'\n-CC570 Extract OS            00 (0) 'MS-DOS'\n-CC571 General Purpose Flag  0800 (2048)\n+CCAE7 CENTRAL HEADER #85    02014B50 (33639248)\n+CCAEB Created Zip Spec      14 (20) '2.0'\n+CCAEC Created OS            03 (3) 'Unix'\n+CCAED Extract Zip Spec      0A (10) '1.0'\n+CCAEE Extract OS            00 (0) 'MS-DOS'\n+CCAEF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC573 Compression Method    0000 (0) 'Stored'\n-CC575 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC579 CRC                   00000000 (0)\n-CC57D Compressed Size       00000000 (0)\n-CC581 Uncompressed Size     00000000 (0)\n-CC585 Filename Length       002F (47)\n-CC587 Extra Length          0000 (0)\n-CC589 Comment Length        0000 (0)\n-CC58B Disk Start            0000 (0)\n-CC58D Int File Attributes   0000 (0)\n+CCAF1 Compression Method    0000 (0) 'Stored'\n+CCAF3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCAF7 CRC                   00000000 (0)\n+CCAFB Compressed Size       00000000 (0)\n+CCAFF Uncompressed Size     00000000 (0)\n+CCB03 Filename Length       002F (47)\n+CCB05 Extra Length          0000 (0)\n+CCB07 Comment Length        0000 (0)\n+CCB09 Disk Start            0000 (0)\n+CCB0B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC58F Ext File Attributes   41ED0010 (1106051088)\n+CCB0D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC593 Local Header Offset   00002545 (9541)\n-CC597 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCB11 Local Header Offset   00002545 (9541)\n+CCB15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC597: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCB15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC597: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCB15: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC56F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCAED: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC5C6 CENTRAL HEADER #86    02014B50 (33639248)\n-CC5CA Created Zip Spec      14 (20) '2.0'\n-CC5CB Created OS            03 (3) 'Unix'\n-CC5CC Extract Zip Spec      0A (10) '1.0'\n-CC5CD Extract OS            00 (0) 'MS-DOS'\n-CC5CE General Purpose Flag  0800 (2048)\n+CCB44 CENTRAL HEADER #86    02014B50 (33639248)\n+CCB48 Created Zip Spec      14 (20) '2.0'\n+CCB49 Created OS            03 (3) 'Unix'\n+CCB4A Extract Zip Spec      0A (10) '1.0'\n+CCB4B Extract OS            00 (0) 'MS-DOS'\n+CCB4C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC5D0 Compression Method    0000 (0) 'Stored'\n-CC5D2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC5D6 CRC                   00000000 (0)\n-CC5DA Compressed Size       00000000 (0)\n-CC5DE Uncompressed Size     00000000 (0)\n-CC5E2 Filename Length       0060 (96)\n-CC5E4 Extra Length          0000 (0)\n-CC5E6 Comment Length        0000 (0)\n-CC5E8 Disk Start            0000 (0)\n-CC5EA Int File Attributes   0000 (0)\n+CCB4E Compression Method    0000 (0) 'Stored'\n+CCB50 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCB54 CRC                   00000000 (0)\n+CCB58 Compressed Size       00000000 (0)\n+CCB5C Uncompressed Size     00000000 (0)\n+CCB60 Filename Length       0060 (96)\n+CCB62 Extra Length          0000 (0)\n+CCB64 Comment Length        0000 (0)\n+CCB66 Disk Start            0000 (0)\n+CCB68 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC5EC Ext File Attributes   41ED0010 (1106051088)\n+CCB6A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC5F0 Local Header Offset   00002592 (9618)\n-CC5F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCB6E Local Header Offset   00002592 (9618)\n+CCB72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC5F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCB72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC5F4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCB72: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC5CC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCB4A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC654 CENTRAL HEADER #87    02014B50 (33639248)\n-CC658 Created Zip Spec      14 (20) '2.0'\n-CC659 Created OS            03 (3) 'Unix'\n-CC65A Extract Zip Spec      0A (10) '1.0'\n-CC65B Extract OS            00 (0) 'MS-DOS'\n-CC65C General Purpose Flag  0800 (2048)\n+CCBD2 CENTRAL HEADER #87    02014B50 (33639248)\n+CCBD6 Created Zip Spec      14 (20) '2.0'\n+CCBD7 Created OS            03 (3) 'Unix'\n+CCBD8 Extract Zip Spec      0A (10) '1.0'\n+CCBD9 Extract OS            00 (0) 'MS-DOS'\n+CCBDA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC65E Compression Method    0000 (0) 'Stored'\n-CC660 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC664 CRC                   00000000 (0)\n-CC668 Compressed Size       00000000 (0)\n-CC66C Uncompressed Size     00000000 (0)\n-CC670 Filename Length       0026 (38)\n-CC672 Extra Length          0000 (0)\n-CC674 Comment Length        0000 (0)\n-CC676 Disk Start            0000 (0)\n-CC678 Int File Attributes   0000 (0)\n+CCBDC Compression Method    0000 (0) 'Stored'\n+CCBDE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCBE2 CRC                   00000000 (0)\n+CCBE6 Compressed Size       00000000 (0)\n+CCBEA Uncompressed Size     00000000 (0)\n+CCBEE Filename Length       0026 (38)\n+CCBF0 Extra Length          0000 (0)\n+CCBF2 Comment Length        0000 (0)\n+CCBF4 Disk Start            0000 (0)\n+CCBF6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC67A Ext File Attributes   41ED0010 (1106051088)\n+CCBF8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC67E Local Header Offset   00002610 (9744)\n-CC682 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCBFC Local Header Offset   00002610 (9744)\n+CCC00 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC682: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCC00: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC682: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCC00: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC65A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCBD8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC6A8 CENTRAL HEADER #88    02014B50 (33639248)\n-CC6AC Created Zip Spec      14 (20) '2.0'\n-CC6AD Created OS            03 (3) 'Unix'\n-CC6AE Extract Zip Spec      0A (10) '1.0'\n-CC6AF Extract OS            00 (0) 'MS-DOS'\n-CC6B0 General Purpose Flag  0800 (2048)\n+CCC26 CENTRAL HEADER #88    02014B50 (33639248)\n+CCC2A Created Zip Spec      14 (20) '2.0'\n+CCC2B Created OS            03 (3) 'Unix'\n+CCC2C Extract Zip Spec      0A (10) '1.0'\n+CCC2D Extract OS            00 (0) 'MS-DOS'\n+CCC2E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC6B2 Compression Method    0000 (0) 'Stored'\n-CC6B4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC6B8 CRC                   00000000 (0)\n-CC6BC Compressed Size       00000000 (0)\n-CC6C0 Uncompressed Size     00000000 (0)\n-CC6C4 Filename Length       002F (47)\n-CC6C6 Extra Length          0000 (0)\n-CC6C8 Comment Length        0000 (0)\n-CC6CA Disk Start            0000 (0)\n-CC6CC Int File Attributes   0000 (0)\n+CCC30 Compression Method    0000 (0) 'Stored'\n+CCC32 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCC36 CRC                   00000000 (0)\n+CCC3A Compressed Size       00000000 (0)\n+CCC3E Uncompressed Size     00000000 (0)\n+CCC42 Filename Length       002F (47)\n+CCC44 Extra Length          0000 (0)\n+CCC46 Comment Length        0000 (0)\n+CCC48 Disk Start            0000 (0)\n+CCC4A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC6CE Ext File Attributes   41ED0010 (1106051088)\n+CCC4C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC6D2 Local Header Offset   00002654 (9812)\n-CC6D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCC50 Local Header Offset   00002654 (9812)\n+CCC54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC6D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCC54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC6D6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCC54: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC6AE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCC2C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC705 CENTRAL HEADER #89    02014B50 (33639248)\n-CC709 Created Zip Spec      14 (20) '2.0'\n-CC70A Created OS            03 (3) 'Unix'\n-CC70B Extract Zip Spec      0A (10) '1.0'\n-CC70C Extract OS            00 (0) 'MS-DOS'\n-CC70D General Purpose Flag  0800 (2048)\n+CCC83 CENTRAL HEADER #89    02014B50 (33639248)\n+CCC87 Created Zip Spec      14 (20) '2.0'\n+CCC88 Created OS            03 (3) 'Unix'\n+CCC89 Extract Zip Spec      0A (10) '1.0'\n+CCC8A Extract OS            00 (0) 'MS-DOS'\n+CCC8B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC70F Compression Method    0000 (0) 'Stored'\n-CC711 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC715 CRC                   00000000 (0)\n-CC719 Compressed Size       00000000 (0)\n-CC71D Uncompressed Size     00000000 (0)\n-CC721 Filename Length       0066 (102)\n-CC723 Extra Length          0000 (0)\n-CC725 Comment Length        0000 (0)\n-CC727 Disk Start            0000 (0)\n-CC729 Int File Attributes   0000 (0)\n+CCC8D Compression Method    0000 (0) 'Stored'\n+CCC8F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCC93 CRC                   00000000 (0)\n+CCC97 Compressed Size       00000000 (0)\n+CCC9B Uncompressed Size     00000000 (0)\n+CCC9F Filename Length       0066 (102)\n+CCCA1 Extra Length          0000 (0)\n+CCCA3 Comment Length        0000 (0)\n+CCCA5 Disk Start            0000 (0)\n+CCCA7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC72B Ext File Attributes   41ED0010 (1106051088)\n+CCCA9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC72F Local Header Offset   000026A1 (9889)\n-CC733 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCCAD Local Header Offset   000026A1 (9889)\n+CCCB1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC733: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCCB1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC733: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCCB1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC70B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCC89: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC799 CENTRAL HEADER #90    02014B50 (33639248)\n-CC79D Created Zip Spec      14 (20) '2.0'\n-CC79E Created OS            03 (3) 'Unix'\n-CC79F Extract Zip Spec      0A (10) '1.0'\n-CC7A0 Extract OS            00 (0) 'MS-DOS'\n-CC7A1 General Purpose Flag  0800 (2048)\n+CCD17 CENTRAL HEADER #90    02014B50 (33639248)\n+CCD1B Created Zip Spec      14 (20) '2.0'\n+CCD1C Created OS            03 (3) 'Unix'\n+CCD1D Extract Zip Spec      0A (10) '1.0'\n+CCD1E Extract OS            00 (0) 'MS-DOS'\n+CCD1F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC7A3 Compression Method    0000 (0) 'Stored'\n-CC7A5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC7A9 CRC                   00000000 (0)\n-CC7AD Compressed Size       00000000 (0)\n-CC7B1 Uncompressed Size     00000000 (0)\n-CC7B5 Filename Length       002E (46)\n-CC7B7 Extra Length          0000 (0)\n-CC7B9 Comment Length        0000 (0)\n-CC7BB Disk Start            0000 (0)\n-CC7BD Int File Attributes   0000 (0)\n+CCD21 Compression Method    0000 (0) 'Stored'\n+CCD23 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCD27 CRC                   00000000 (0)\n+CCD2B Compressed Size       00000000 (0)\n+CCD2F Uncompressed Size     00000000 (0)\n+CCD33 Filename Length       002E (46)\n+CCD35 Extra Length          0000 (0)\n+CCD37 Comment Length        0000 (0)\n+CCD39 Disk Start            0000 (0)\n+CCD3B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC7BF Ext File Attributes   41ED0010 (1106051088)\n+CCD3D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC7C3 Local Header Offset   00002725 (10021)\n-CC7C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCD41 Local Header Offset   00002725 (10021)\n+CCD45 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC7C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCD45: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC7C7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCD45: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC79F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCD1D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC7F5 CENTRAL HEADER #91    02014B50 (33639248)\n-CC7F9 Created Zip Spec      14 (20) '2.0'\n-CC7FA Created OS            03 (3) 'Unix'\n-CC7FB Extract Zip Spec      0A (10) '1.0'\n-CC7FC Extract OS            00 (0) 'MS-DOS'\n-CC7FD General Purpose Flag  0800 (2048)\n+CCD73 CENTRAL HEADER #91    02014B50 (33639248)\n+CCD77 Created Zip Spec      14 (20) '2.0'\n+CCD78 Created OS            03 (3) 'Unix'\n+CCD79 Extract Zip Spec      0A (10) '1.0'\n+CCD7A Extract OS            00 (0) 'MS-DOS'\n+CCD7B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC7FF Compression Method    0000 (0) 'Stored'\n-CC801 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC805 CRC                   00000000 (0)\n-CC809 Compressed Size       00000000 (0)\n-CC80D Uncompressed Size     00000000 (0)\n-CC811 Filename Length       0037 (55)\n-CC813 Extra Length          0000 (0)\n-CC815 Comment Length        0000 (0)\n-CC817 Disk Start            0000 (0)\n-CC819 Int File Attributes   0000 (0)\n+CCD7D Compression Method    0000 (0) 'Stored'\n+CCD7F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCD83 CRC                   00000000 (0)\n+CCD87 Compressed Size       00000000 (0)\n+CCD8B Uncompressed Size     00000000 (0)\n+CCD8F Filename Length       0037 (55)\n+CCD91 Extra Length          0000 (0)\n+CCD93 Comment Length        0000 (0)\n+CCD95 Disk Start            0000 (0)\n+CCD97 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC81B Ext File Attributes   41ED0010 (1106051088)\n+CCD99 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC81F Local Header Offset   00002771 (10097)\n-CC823 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCD9D Local Header Offset   00002771 (10097)\n+CCDA1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC823: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCDA1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC823: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCDA1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC7FB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCD79: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC85A CENTRAL HEADER #92    02014B50 (33639248)\n-CC85E Created Zip Spec      14 (20) '2.0'\n-CC85F Created OS            03 (3) 'Unix'\n-CC860 Extract Zip Spec      0A (10) '1.0'\n-CC861 Extract OS            00 (0) 'MS-DOS'\n-CC862 General Purpose Flag  0800 (2048)\n+CCDD8 CENTRAL HEADER #92    02014B50 (33639248)\n+CCDDC Created Zip Spec      14 (20) '2.0'\n+CCDDD Created OS            03 (3) 'Unix'\n+CCDDE Extract Zip Spec      0A (10) '1.0'\n+CCDDF Extract OS            00 (0) 'MS-DOS'\n+CCDE0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC864 Compression Method    0000 (0) 'Stored'\n-CC866 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC86A CRC                   00000000 (0)\n-CC86E Compressed Size       00000000 (0)\n-CC872 Uncompressed Size     00000000 (0)\n-CC876 Filename Length       007B (123)\n-CC878 Extra Length          0000 (0)\n-CC87A Comment Length        0000 (0)\n-CC87C Disk Start            0000 (0)\n-CC87E Int File Attributes   0000 (0)\n+CCDE2 Compression Method    0000 (0) 'Stored'\n+CCDE4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCDE8 CRC                   00000000 (0)\n+CCDEC Compressed Size       00000000 (0)\n+CCDF0 Uncompressed Size     00000000 (0)\n+CCDF4 Filename Length       007B (123)\n+CCDF6 Extra Length          0000 (0)\n+CCDF8 Comment Length        0000 (0)\n+CCDFA Disk Start            0000 (0)\n+CCDFC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC880 Ext File Attributes   41ED0010 (1106051088)\n+CCDFE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC884 Local Header Offset   000027C6 (10182)\n-CC888 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCE02 Local Header Offset   000027C6 (10182)\n+CCE06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC888: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCE06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC888: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCE06: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC860: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCDDE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC903 CENTRAL HEADER #93    02014B50 (33639248)\n-CC907 Created Zip Spec      14 (20) '2.0'\n-CC908 Created OS            03 (3) 'Unix'\n-CC909 Extract Zip Spec      0A (10) '1.0'\n-CC90A Extract OS            00 (0) 'MS-DOS'\n-CC90B General Purpose Flag  0800 (2048)\n+CCE81 CENTRAL HEADER #93    02014B50 (33639248)\n+CCE85 Created Zip Spec      14 (20) '2.0'\n+CCE86 Created OS            03 (3) 'Unix'\n+CCE87 Extract Zip Spec      0A (10) '1.0'\n+CCE88 Extract OS            00 (0) 'MS-DOS'\n+CCE89 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC90D Compression Method    0000 (0) 'Stored'\n-CC90F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC913 CRC                   00000000 (0)\n-CC917 Compressed Size       00000000 (0)\n-CC91B Uncompressed Size     00000000 (0)\n-CC91F Filename Length       0031 (49)\n-CC921 Extra Length          0000 (0)\n-CC923 Comment Length        0000 (0)\n-CC925 Disk Start            0000 (0)\n-CC927 Int File Attributes   0000 (0)\n+CCE8B Compression Method    0000 (0) 'Stored'\n+CCE8D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCE91 CRC                   00000000 (0)\n+CCE95 Compressed Size       00000000 (0)\n+CCE99 Uncompressed Size     00000000 (0)\n+CCE9D Filename Length       0031 (49)\n+CCE9F Extra Length          0000 (0)\n+CCEA1 Comment Length        0000 (0)\n+CCEA3 Disk Start            0000 (0)\n+CCEA5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC929 Ext File Attributes   41ED0010 (1106051088)\n+CCEA7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC92D Local Header Offset   0000285F (10335)\n-CC931 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCEAB Local Header Offset   0000285F (10335)\n+CCEAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC931: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCEAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC931: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCEAF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC909: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCE87: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC962 CENTRAL HEADER #94    02014B50 (33639248)\n-CC966 Created Zip Spec      14 (20) '2.0'\n-CC967 Created OS            03 (3) 'Unix'\n-CC968 Extract Zip Spec      0A (10) '1.0'\n-CC969 Extract OS            00 (0) 'MS-DOS'\n-CC96A General Purpose Flag  0800 (2048)\n+CCEE0 CENTRAL HEADER #94    02014B50 (33639248)\n+CCEE4 Created Zip Spec      14 (20) '2.0'\n+CCEE5 Created OS            03 (3) 'Unix'\n+CCEE6 Extract Zip Spec      0A (10) '1.0'\n+CCEE7 Extract OS            00 (0) 'MS-DOS'\n+CCEE8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC96C Compression Method    0000 (0) 'Stored'\n-CC96E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC972 CRC                   00000000 (0)\n-CC976 Compressed Size       00000000 (0)\n-CC97A Uncompressed Size     00000000 (0)\n-CC97E Filename Length       003A (58)\n-CC980 Extra Length          0000 (0)\n-CC982 Comment Length        0000 (0)\n-CC984 Disk Start            0000 (0)\n-CC986 Int File Attributes   0000 (0)\n+CCEEA Compression Method    0000 (0) 'Stored'\n+CCEEC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCEF0 CRC                   00000000 (0)\n+CCEF4 Compressed Size       00000000 (0)\n+CCEF8 Uncompressed Size     00000000 (0)\n+CCEFC Filename Length       003A (58)\n+CCEFE Extra Length          0000 (0)\n+CCF00 Comment Length        0000 (0)\n+CCF02 Disk Start            0000 (0)\n+CCF04 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC988 Ext File Attributes   41ED0010 (1106051088)\n+CCF06 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC98C Local Header Offset   000028AE (10414)\n-CC990 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCF0A Local Header Offset   000028AE (10414)\n+CCF0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC990: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCF0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC990: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCF0E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC968: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCEE6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CC9CA CENTRAL HEADER #95    02014B50 (33639248)\n-CC9CE Created Zip Spec      14 (20) '2.0'\n-CC9CF Created OS            03 (3) 'Unix'\n-CC9D0 Extract Zip Spec      0A (10) '1.0'\n-CC9D1 Extract OS            00 (0) 'MS-DOS'\n-CC9D2 General Purpose Flag  0800 (2048)\n+CCF48 CENTRAL HEADER #95    02014B50 (33639248)\n+CCF4C Created Zip Spec      14 (20) '2.0'\n+CCF4D Created OS            03 (3) 'Unix'\n+CCF4E Extract Zip Spec      0A (10) '1.0'\n+CCF4F Extract OS            00 (0) 'MS-DOS'\n+CCF50 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CC9D4 Compression Method    0000 (0) 'Stored'\n-CC9D6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CC9DA CRC                   00000000 (0)\n-CC9DE Compressed Size       00000000 (0)\n-CC9E2 Uncompressed Size     00000000 (0)\n-CC9E6 Filename Length       0081 (129)\n-CC9E8 Extra Length          0000 (0)\n-CC9EA Comment Length        0000 (0)\n-CC9EC Disk Start            0000 (0)\n-CC9EE Int File Attributes   0000 (0)\n+CCF52 Compression Method    0000 (0) 'Stored'\n+CCF54 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CCF58 CRC                   00000000 (0)\n+CCF5C Compressed Size       00000000 (0)\n+CCF60 Uncompressed Size     00000000 (0)\n+CCF64 Filename Length       0081 (129)\n+CCF66 Extra Length          0000 (0)\n+CCF68 Comment Length        0000 (0)\n+CCF6A Disk Start            0000 (0)\n+CCF6C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CC9F0 Ext File Attributes   41ED0010 (1106051088)\n+CCF6E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CC9F4 Local Header Offset   00002906 (10502)\n-CC9F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CCF72 Local Header Offset   00002906 (10502)\n+CCF76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCC9F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCF76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCC9F8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCCF76: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCC9D0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCF4E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCA79 CENTRAL HEADER #96    02014B50 (33639248)\n-CCA7D Created Zip Spec      14 (20) '2.0'\n-CCA7E Created OS            03 (3) 'Unix'\n-CCA7F Extract Zip Spec      0A (10) '1.0'\n-CCA80 Extract OS            00 (0) 'MS-DOS'\n-CCA81 General Purpose Flag  0800 (2048)\n+CCFF7 CENTRAL HEADER #96    02014B50 (33639248)\n+CCFFB Created Zip Spec      14 (20) '2.0'\n+CCFFC Created OS            03 (3) 'Unix'\n+CCFFD Extract Zip Spec      0A (10) '1.0'\n+CCFFE Extract OS            00 (0) 'MS-DOS'\n+CCFFF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCA83 Compression Method    0000 (0) 'Stored'\n-CCA85 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCA89 CRC                   00000000 (0)\n-CCA8D Compressed Size       00000000 (0)\n-CCA91 Uncompressed Size     00000000 (0)\n-CCA95 Filename Length       0088 (136)\n-CCA97 Extra Length          0000 (0)\n-CCA99 Comment Length        0000 (0)\n-CCA9B Disk Start            0000 (0)\n-CCA9D Int File Attributes   0000 (0)\n+CD001 Compression Method    0000 (0) 'Stored'\n+CD003 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD007 CRC                   00000000 (0)\n+CD00B Compressed Size       00000000 (0)\n+CD00F Uncompressed Size     00000000 (0)\n+CD013 Filename Length       0088 (136)\n+CD015 Extra Length          0000 (0)\n+CD017 Comment Length        0000 (0)\n+CD019 Disk Start            0000 (0)\n+CD01B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCA9F Ext File Attributes   41ED0010 (1106051088)\n+CD01D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCAA3 Local Header Offset   000029A5 (10661)\n-CCAA7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+CD021 Local Header Offset   000029A5 (10661)\n+CD025 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0xCCAA7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD025: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCAA7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD025: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCA7F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCCFFD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCB2F CENTRAL HEADER #97    02014B50 (33639248)\n-CCB33 Created Zip Spec      14 (20) '2.0'\n-CCB34 Created OS            03 (3) 'Unix'\n-CCB35 Extract Zip Spec      0A (10) '1.0'\n-CCB36 Extract OS            00 (0) 'MS-DOS'\n-CCB37 General Purpose Flag  0800 (2048)\n+CD0AD CENTRAL HEADER #97    02014B50 (33639248)\n+CD0B1 Created Zip Spec      14 (20) '2.0'\n+CD0B2 Created OS            03 (3) 'Unix'\n+CD0B3 Extract Zip Spec      0A (10) '1.0'\n+CD0B4 Extract OS            00 (0) 'MS-DOS'\n+CD0B5 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCB39 Compression Method    0000 (0) 'Stored'\n-CCB3B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCB3F CRC                   00000000 (0)\n-CCB43 Compressed Size       00000000 (0)\n-CCB47 Uncompressed Size     00000000 (0)\n-CCB4B Filename Length       0088 (136)\n-CCB4D Extra Length          0000 (0)\n-CCB4F Comment Length        0000 (0)\n-CCB51 Disk Start            0000 (0)\n-CCB53 Int File Attributes   0000 (0)\n+CD0B7 Compression Method    0000 (0) 'Stored'\n+CD0B9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD0BD CRC                   00000000 (0)\n+CD0C1 Compressed Size       00000000 (0)\n+CD0C5 Uncompressed Size     00000000 (0)\n+CD0C9 Filename Length       0088 (136)\n+CD0CB Extra Length          0000 (0)\n+CD0CD Comment Length        0000 (0)\n+CD0CF Disk Start            0000 (0)\n+CD0D1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCB55 Ext File Attributes   41ED0010 (1106051088)\n+CD0D3 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCB59 Local Header Offset   00002A4B (10827)\n-CCB5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+CD0D7 Local Header Offset   00002A4B (10827)\n+CD0DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0xCCB5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD0DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCB5D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD0DB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCB35: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD0B3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCBE5 CENTRAL HEADER #98    02014B50 (33639248)\n-CCBE9 Created Zip Spec      14 (20) '2.0'\n-CCBEA Created OS            03 (3) 'Unix'\n-CCBEB Extract Zip Spec      0A (10) '1.0'\n-CCBEC Extract OS            00 (0) 'MS-DOS'\n-CCBED General Purpose Flag  0800 (2048)\n+CD163 CENTRAL HEADER #98    02014B50 (33639248)\n+CD167 Created Zip Spec      14 (20) '2.0'\n+CD168 Created OS            03 (3) 'Unix'\n+CD169 Extract Zip Spec      0A (10) '1.0'\n+CD16A Extract OS            00 (0) 'MS-DOS'\n+CD16B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCBEF Compression Method    0000 (0) 'Stored'\n-CCBF1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCBF5 CRC                   00000000 (0)\n-CCBF9 Compressed Size       00000000 (0)\n-CCBFD Uncompressed Size     00000000 (0)\n-CCC01 Filename Length       0026 (38)\n-CCC03 Extra Length          0000 (0)\n-CCC05 Comment Length        0000 (0)\n-CCC07 Disk Start            0000 (0)\n-CCC09 Int File Attributes   0000 (0)\n+CD16D Compression Method    0000 (0) 'Stored'\n+CD16F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD173 CRC                   00000000 (0)\n+CD177 Compressed Size       00000000 (0)\n+CD17B Uncompressed Size     00000000 (0)\n+CD17F Filename Length       0026 (38)\n+CD181 Extra Length          0000 (0)\n+CD183 Comment Length        0000 (0)\n+CD185 Disk Start            0000 (0)\n+CD187 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCC0B Ext File Attributes   41ED0010 (1106051088)\n+CD189 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCC0F Local Header Offset   00002AF1 (10993)\n-CCC13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD18D Local Header Offset   00002AF1 (10993)\n+CD191 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCC13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD191: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCC13: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD191: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCBEB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD169: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCC39 CENTRAL HEADER #99    02014B50 (33639248)\n-CCC3D Created Zip Spec      14 (20) '2.0'\n-CCC3E Created OS            03 (3) 'Unix'\n-CCC3F Extract Zip Spec      0A (10) '1.0'\n-CCC40 Extract OS            00 (0) 'MS-DOS'\n-CCC41 General Purpose Flag  0800 (2048)\n+CD1B7 CENTRAL HEADER #99    02014B50 (33639248)\n+CD1BB Created Zip Spec      14 (20) '2.0'\n+CD1BC Created OS            03 (3) 'Unix'\n+CD1BD Extract Zip Spec      0A (10) '1.0'\n+CD1BE Extract OS            00 (0) 'MS-DOS'\n+CD1BF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCC43 Compression Method    0000 (0) 'Stored'\n-CCC45 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCC49 CRC                   00000000 (0)\n-CCC4D Compressed Size       00000000 (0)\n-CCC51 Uncompressed Size     00000000 (0)\n-CCC55 Filename Length       002F (47)\n-CCC57 Extra Length          0000 (0)\n-CCC59 Comment Length        0000 (0)\n-CCC5B Disk Start            0000 (0)\n-CCC5D Int File Attributes   0000 (0)\n+CD1C1 Compression Method    0000 (0) 'Stored'\n+CD1C3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD1C7 CRC                   00000000 (0)\n+CD1CB Compressed Size       00000000 (0)\n+CD1CF Uncompressed Size     00000000 (0)\n+CD1D3 Filename Length       002F (47)\n+CD1D5 Extra Length          0000 (0)\n+CD1D7 Comment Length        0000 (0)\n+CD1D9 Disk Start            0000 (0)\n+CD1DB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCC5F Ext File Attributes   41ED0010 (1106051088)\n+CD1DD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCC63 Local Header Offset   00002B35 (11061)\n-CCC67 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD1E1 Local Header Offset   00002B35 (11061)\n+CD1E5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCC67: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD1E5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCC67: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD1E5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCC3F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD1BD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCC96 CENTRAL HEADER #100   02014B50 (33639248)\n-CCC9A Created Zip Spec      14 (20) '2.0'\n-CCC9B Created OS            03 (3) 'Unix'\n-CCC9C Extract Zip Spec      0A (10) '1.0'\n-CCC9D Extract OS            00 (0) 'MS-DOS'\n-CCC9E General Purpose Flag  0800 (2048)\n+CD214 CENTRAL HEADER #100   02014B50 (33639248)\n+CD218 Created Zip Spec      14 (20) '2.0'\n+CD219 Created OS            03 (3) 'Unix'\n+CD21A Extract Zip Spec      0A (10) '1.0'\n+CD21B Extract OS            00 (0) 'MS-DOS'\n+CD21C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCCA0 Compression Method    0000 (0) 'Stored'\n-CCCA2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCCA6 CRC                   00000000 (0)\n-CCCAA Compressed Size       00000000 (0)\n-CCCAE Uncompressed Size     00000000 (0)\n-CCCB2 Filename Length       005D (93)\n-CCCB4 Extra Length          0000 (0)\n-CCCB6 Comment Length        0000 (0)\n-CCCB8 Disk Start            0000 (0)\n-CCCBA Int File Attributes   0000 (0)\n+CD21E Compression Method    0000 (0) 'Stored'\n+CD220 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD224 CRC                   00000000 (0)\n+CD228 Compressed Size       00000000 (0)\n+CD22C Uncompressed Size     00000000 (0)\n+CD230 Filename Length       005D (93)\n+CD232 Extra Length          0000 (0)\n+CD234 Comment Length        0000 (0)\n+CD236 Disk Start            0000 (0)\n+CD238 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCCBC Ext File Attributes   41ED0010 (1106051088)\n+CD23A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCCC0 Local Header Offset   00002B82 (11138)\n-CCCC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD23E Local Header Offset   00002B82 (11138)\n+CD242 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCCC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD242: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCCC4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD242: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCC9C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD21A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCD21 CENTRAL HEADER #101   02014B50 (33639248)\n-CCD25 Created Zip Spec      14 (20) '2.0'\n-CCD26 Created OS            03 (3) 'Unix'\n-CCD27 Extract Zip Spec      0A (10) '1.0'\n-CCD28 Extract OS            00 (0) 'MS-DOS'\n-CCD29 General Purpose Flag  0800 (2048)\n+CD29F CENTRAL HEADER #101   02014B50 (33639248)\n+CD2A3 Created Zip Spec      14 (20) '2.0'\n+CD2A4 Created OS            03 (3) 'Unix'\n+CD2A5 Extract Zip Spec      0A (10) '1.0'\n+CD2A6 Extract OS            00 (0) 'MS-DOS'\n+CD2A7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCD2B Compression Method    0000 (0) 'Stored'\n-CCD2D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCD31 CRC                   00000000 (0)\n-CCD35 Compressed Size       00000000 (0)\n-CCD39 Uncompressed Size     00000000 (0)\n-CCD3D Filename Length       002D (45)\n-CCD3F Extra Length          0000 (0)\n-CCD41 Comment Length        0000 (0)\n-CCD43 Disk Start            0000 (0)\n-CCD45 Int File Attributes   0000 (0)\n+CD2A9 Compression Method    0000 (0) 'Stored'\n+CD2AB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD2AF CRC                   00000000 (0)\n+CD2B3 Compressed Size       00000000 (0)\n+CD2B7 Uncompressed Size     00000000 (0)\n+CD2BB Filename Length       002D (45)\n+CD2BD Extra Length          0000 (0)\n+CD2BF Comment Length        0000 (0)\n+CD2C1 Disk Start            0000 (0)\n+CD2C3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCD47 Ext File Attributes   41ED0010 (1106051088)\n+CD2C5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCD4B Local Header Offset   00002BFD (11261)\n-CCD4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD2C9 Local Header Offset   00002BFD (11261)\n+CD2CD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCD4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD2CD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCD4F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD2CD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCD27: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD2A5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCD7C CENTRAL HEADER #102   02014B50 (33639248)\n-CCD80 Created Zip Spec      14 (20) '2.0'\n-CCD81 Created OS            03 (3) 'Unix'\n-CCD82 Extract Zip Spec      0A (10) '1.0'\n-CCD83 Extract OS            00 (0) 'MS-DOS'\n-CCD84 General Purpose Flag  0800 (2048)\n+CD2FA CENTRAL HEADER #102   02014B50 (33639248)\n+CD2FE Created Zip Spec      14 (20) '2.0'\n+CD2FF Created OS            03 (3) 'Unix'\n+CD300 Extract Zip Spec      0A (10) '1.0'\n+CD301 Extract OS            00 (0) 'MS-DOS'\n+CD302 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCD86 Compression Method    0000 (0) 'Stored'\n-CCD88 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCD8C CRC                   00000000 (0)\n-CCD90 Compressed Size       00000000 (0)\n-CCD94 Uncompressed Size     00000000 (0)\n-CCD98 Filename Length       0036 (54)\n-CCD9A Extra Length          0000 (0)\n-CCD9C Comment Length        0000 (0)\n-CCD9E Disk Start            0000 (0)\n-CCDA0 Int File Attributes   0000 (0)\n+CD304 Compression Method    0000 (0) 'Stored'\n+CD306 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD30A CRC                   00000000 (0)\n+CD30E Compressed Size       00000000 (0)\n+CD312 Uncompressed Size     00000000 (0)\n+CD316 Filename Length       0036 (54)\n+CD318 Extra Length          0000 (0)\n+CD31A Comment Length        0000 (0)\n+CD31C Disk Start            0000 (0)\n+CD31E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCDA2 Ext File Attributes   41ED0010 (1106051088)\n+CD320 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCDA6 Local Header Offset   00002C48 (11336)\n-CCDAA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD324 Local Header Offset   00002C48 (11336)\n+CD328 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCDAA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD328: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCDAA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD328: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCD82: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD300: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCDE0 CENTRAL HEADER #103   02014B50 (33639248)\n-CCDE4 Created Zip Spec      14 (20) '2.0'\n-CCDE5 Created OS            03 (3) 'Unix'\n-CCDE6 Extract Zip Spec      0A (10) '1.0'\n-CCDE7 Extract OS            00 (0) 'MS-DOS'\n-CCDE8 General Purpose Flag  0800 (2048)\n+CD35E CENTRAL HEADER #103   02014B50 (33639248)\n+CD362 Created Zip Spec      14 (20) '2.0'\n+CD363 Created OS            03 (3) 'Unix'\n+CD364 Extract Zip Spec      0A (10) '1.0'\n+CD365 Extract OS            00 (0) 'MS-DOS'\n+CD366 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCDEA Compression Method    0000 (0) 'Stored'\n-CCDEC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCDF0 CRC                   00000000 (0)\n-CCDF4 Compressed Size       00000000 (0)\n-CCDF8 Uncompressed Size     00000000 (0)\n-CCDFC Filename Length       006A (106)\n-CCDFE Extra Length          0000 (0)\n-CCE00 Comment Length        0000 (0)\n-CCE02 Disk Start            0000 (0)\n-CCE04 Int File Attributes   0000 (0)\n+CD368 Compression Method    0000 (0) 'Stored'\n+CD36A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD36E CRC                   00000000 (0)\n+CD372 Compressed Size       00000000 (0)\n+CD376 Uncompressed Size     00000000 (0)\n+CD37A Filename Length       006A (106)\n+CD37C Extra Length          0000 (0)\n+CD37E Comment Length        0000 (0)\n+CD380 Disk Start            0000 (0)\n+CD382 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCE06 Ext File Attributes   41ED0010 (1106051088)\n+CD384 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCE0A Local Header Offset   00002C9C (11420)\n-CCE0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD388 Local Header Offset   00002C9C (11420)\n+CD38C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCE0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD38C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCE0E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD38C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCDE6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD364: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCE78 CENTRAL HEADER #104   02014B50 (33639248)\n-CCE7C Created Zip Spec      14 (20) '2.0'\n-CCE7D Created OS            03 (3) 'Unix'\n-CCE7E Extract Zip Spec      0A (10) '1.0'\n-CCE7F Extract OS            00 (0) 'MS-DOS'\n-CCE80 General Purpose Flag  0800 (2048)\n+CD3F6 CENTRAL HEADER #104   02014B50 (33639248)\n+CD3FA Created Zip Spec      14 (20) '2.0'\n+CD3FB Created OS            03 (3) 'Unix'\n+CD3FC Extract Zip Spec      0A (10) '1.0'\n+CD3FD Extract OS            00 (0) 'MS-DOS'\n+CD3FE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCE82 Compression Method    0000 (0) 'Stored'\n-CCE84 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCE88 CRC                   00000000 (0)\n-CCE8C Compressed Size       00000000 (0)\n-CCE90 Uncompressed Size     00000000 (0)\n-CCE94 Filename Length       006E (110)\n-CCE96 Extra Length          0000 (0)\n-CCE98 Comment Length        0000 (0)\n-CCE9A Disk Start            0000 (0)\n-CCE9C Int File Attributes   0000 (0)\n+CD400 Compression Method    0000 (0) 'Stored'\n+CD402 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD406 CRC                   00000000 (0)\n+CD40A Compressed Size       00000000 (0)\n+CD40E Uncompressed Size     00000000 (0)\n+CD412 Filename Length       006E (110)\n+CD414 Extra Length          0000 (0)\n+CD416 Comment Length        0000 (0)\n+CD418 Disk Start            0000 (0)\n+CD41A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCE9E Ext File Attributes   41ED0010 (1106051088)\n+CD41C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCEA2 Local Header Offset   00002D24 (11556)\n-CCEA6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD420 Local Header Offset   00002D24 (11556)\n+CD424 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCEA6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD424: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCEA6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD424: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCE7E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD3FC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCF14 CENTRAL HEADER #105   02014B50 (33639248)\n-CCF18 Created Zip Spec      14 (20) '2.0'\n-CCF19 Created OS            03 (3) 'Unix'\n-CCF1A Extract Zip Spec      0A (10) '1.0'\n-CCF1B Extract OS            00 (0) 'MS-DOS'\n-CCF1C General Purpose Flag  0800 (2048)\n+CD492 CENTRAL HEADER #105   02014B50 (33639248)\n+CD496 Created Zip Spec      14 (20) '2.0'\n+CD497 Created OS            03 (3) 'Unix'\n+CD498 Extract Zip Spec      0A (10) '1.0'\n+CD499 Extract OS            00 (0) 'MS-DOS'\n+CD49A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCF1E Compression Method    0000 (0) 'Stored'\n-CCF20 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCF24 CRC                   00000000 (0)\n-CCF28 Compressed Size       00000000 (0)\n-CCF2C Uncompressed Size     00000000 (0)\n-CCF30 Filename Length       0060 (96)\n-CCF32 Extra Length          0000 (0)\n-CCF34 Comment Length        0000 (0)\n-CCF36 Disk Start            0000 (0)\n-CCF38 Int File Attributes   0000 (0)\n+CD49C Compression Method    0000 (0) 'Stored'\n+CD49E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD4A2 CRC                   00000000 (0)\n+CD4A6 Compressed Size       00000000 (0)\n+CD4AA Uncompressed Size     00000000 (0)\n+CD4AE Filename Length       0060 (96)\n+CD4B0 Extra Length          0000 (0)\n+CD4B2 Comment Length        0000 (0)\n+CD4B4 Disk Start            0000 (0)\n+CD4B6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCF3A Ext File Attributes   41ED0010 (1106051088)\n+CD4B8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCF3E Local Header Offset   00002DB0 (11696)\n-CCF42 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD4BC Local Header Offset   00002DB0 (11696)\n+CD4C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCF42: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD4C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCF42: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD4C0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCF1A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD498: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CCFA2 CENTRAL HEADER #106   02014B50 (33639248)\n-CCFA6 Created Zip Spec      14 (20) '2.0'\n-CCFA7 Created OS            03 (3) 'Unix'\n-CCFA8 Extract Zip Spec      0A (10) '1.0'\n-CCFA9 Extract OS            00 (0) 'MS-DOS'\n-CCFAA General Purpose Flag  0800 (2048)\n+CD520 CENTRAL HEADER #106   02014B50 (33639248)\n+CD524 Created Zip Spec      14 (20) '2.0'\n+CD525 Created OS            03 (3) 'Unix'\n+CD526 Extract Zip Spec      0A (10) '1.0'\n+CD527 Extract OS            00 (0) 'MS-DOS'\n+CD528 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CCFAC Compression Method    0000 (0) 'Stored'\n-CCFAE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CCFB2 CRC                   00000000 (0)\n-CCFB6 Compressed Size       00000000 (0)\n-CCFBA Uncompressed Size     00000000 (0)\n-CCFBE Filename Length       0060 (96)\n-CCFC0 Extra Length          0000 (0)\n-CCFC2 Comment Length        0000 (0)\n-CCFC4 Disk Start            0000 (0)\n-CCFC6 Int File Attributes   0000 (0)\n+CD52A Compression Method    0000 (0) 'Stored'\n+CD52C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD530 CRC                   00000000 (0)\n+CD534 Compressed Size       00000000 (0)\n+CD538 Uncompressed Size     00000000 (0)\n+CD53C Filename Length       0060 (96)\n+CD53E Extra Length          0000 (0)\n+CD540 Comment Length        0000 (0)\n+CD542 Disk Start            0000 (0)\n+CD544 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CCFC8 Ext File Attributes   41ED0010 (1106051088)\n+CD546 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CCFCC Local Header Offset   00002E2E (11822)\n-CCFD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD54A Local Header Offset   00002E2E (11822)\n+CD54E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCCFD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD54E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCCFD0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD54E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCCFA8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD526: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD030 CENTRAL HEADER #107   02014B50 (33639248)\n-CD034 Created Zip Spec      14 (20) '2.0'\n-CD035 Created OS            03 (3) 'Unix'\n-CD036 Extract Zip Spec      0A (10) '1.0'\n-CD037 Extract OS            00 (0) 'MS-DOS'\n-CD038 General Purpose Flag  0800 (2048)\n+CD5AE CENTRAL HEADER #107   02014B50 (33639248)\n+CD5B2 Created Zip Spec      14 (20) '2.0'\n+CD5B3 Created OS            03 (3) 'Unix'\n+CD5B4 Extract Zip Spec      0A (10) '1.0'\n+CD5B5 Extract OS            00 (0) 'MS-DOS'\n+CD5B6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD03A Compression Method    0000 (0) 'Stored'\n-CD03C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD040 CRC                   00000000 (0)\n-CD044 Compressed Size       00000000 (0)\n-CD048 Uncompressed Size     00000000 (0)\n-CD04C Filename Length       0023 (35)\n-CD04E Extra Length          0000 (0)\n-CD050 Comment Length        0000 (0)\n-CD052 Disk Start            0000 (0)\n-CD054 Int File Attributes   0000 (0)\n+CD5B8 Compression Method    0000 (0) 'Stored'\n+CD5BA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD5BE CRC                   00000000 (0)\n+CD5C2 Compressed Size       00000000 (0)\n+CD5C6 Uncompressed Size     00000000 (0)\n+CD5CA Filename Length       0023 (35)\n+CD5CC Extra Length          0000 (0)\n+CD5CE Comment Length        0000 (0)\n+CD5D0 Disk Start            0000 (0)\n+CD5D2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD056 Ext File Attributes   41ED0010 (1106051088)\n+CD5D4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD05A Local Header Offset   00002EAC (11948)\n-CD05E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD5D8 Local Header Offset   00002EAC (11948)\n+CD5DC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD05E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD5DC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD05E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD5DC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD036: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD5B4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD081 CENTRAL HEADER #108   02014B50 (33639248)\n-CD085 Created Zip Spec      14 (20) '2.0'\n-CD086 Created OS            03 (3) 'Unix'\n-CD087 Extract Zip Spec      0A (10) '1.0'\n-CD088 Extract OS            00 (0) 'MS-DOS'\n-CD089 General Purpose Flag  0800 (2048)\n+CD5FF CENTRAL HEADER #108   02014B50 (33639248)\n+CD603 Created Zip Spec      14 (20) '2.0'\n+CD604 Created OS            03 (3) 'Unix'\n+CD605 Extract Zip Spec      0A (10) '1.0'\n+CD606 Extract OS            00 (0) 'MS-DOS'\n+CD607 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD08B Compression Method    0000 (0) 'Stored'\n-CD08D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD091 CRC                   00000000 (0)\n-CD095 Compressed Size       00000000 (0)\n-CD099 Uncompressed Size     00000000 (0)\n-CD09D Filename Length       002C (44)\n-CD09F Extra Length          0000 (0)\n-CD0A1 Comment Length        0000 (0)\n-CD0A3 Disk Start            0000 (0)\n-CD0A5 Int File Attributes   0000 (0)\n+CD609 Compression Method    0000 (0) 'Stored'\n+CD60B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD60F CRC                   00000000 (0)\n+CD613 Compressed Size       00000000 (0)\n+CD617 Uncompressed Size     00000000 (0)\n+CD61B Filename Length       002C (44)\n+CD61D Extra Length          0000 (0)\n+CD61F Comment Length        0000 (0)\n+CD621 Disk Start            0000 (0)\n+CD623 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD0A7 Ext File Attributes   41ED0010 (1106051088)\n+CD625 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD0AB Local Header Offset   00002EED (12013)\n-CD0AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD629 Local Header Offset   00002EED (12013)\n+CD62D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD0AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD62D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD0AF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD62D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD087: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD605: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD0DB CENTRAL HEADER #109   02014B50 (33639248)\n-CD0DF Created Zip Spec      14 (20) '2.0'\n-CD0E0 Created OS            03 (3) 'Unix'\n-CD0E1 Extract Zip Spec      0A (10) '1.0'\n-CD0E2 Extract OS            00 (0) 'MS-DOS'\n-CD0E3 General Purpose Flag  0800 (2048)\n+CD659 CENTRAL HEADER #109   02014B50 (33639248)\n+CD65D Created Zip Spec      14 (20) '2.0'\n+CD65E Created OS            03 (3) 'Unix'\n+CD65F Extract Zip Spec      0A (10) '1.0'\n+CD660 Extract OS            00 (0) 'MS-DOS'\n+CD661 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD0E5 Compression Method    0000 (0) 'Stored'\n-CD0E7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD0EB CRC                   00000000 (0)\n-CD0EF Compressed Size       00000000 (0)\n-CD0F3 Uncompressed Size     00000000 (0)\n-CD0F7 Filename Length       005E (94)\n-CD0F9 Extra Length          0000 (0)\n-CD0FB Comment Length        0000 (0)\n-CD0FD Disk Start            0000 (0)\n-CD0FF Int File Attributes   0000 (0)\n+CD663 Compression Method    0000 (0) 'Stored'\n+CD665 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD669 CRC                   00000000 (0)\n+CD66D Compressed Size       00000000 (0)\n+CD671 Uncompressed Size     00000000 (0)\n+CD675 Filename Length       005E (94)\n+CD677 Extra Length          0000 (0)\n+CD679 Comment Length        0000 (0)\n+CD67B Disk Start            0000 (0)\n+CD67D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD101 Ext File Attributes   41ED0010 (1106051088)\n+CD67F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD105 Local Header Offset   00002F37 (12087)\n-CD109 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD683 Local Header Offset   00002F37 (12087)\n+CD687 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD109: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD687: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD109: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD687: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD0E1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD65F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD167 CENTRAL HEADER #110   02014B50 (33639248)\n-CD16B Created Zip Spec      14 (20) '2.0'\n-CD16C Created OS            03 (3) 'Unix'\n-CD16D Extract Zip Spec      0A (10) '1.0'\n-CD16E Extract OS            00 (0) 'MS-DOS'\n-CD16F General Purpose Flag  0800 (2048)\n+CD6E5 CENTRAL HEADER #110   02014B50 (33639248)\n+CD6E9 Created Zip Spec      14 (20) '2.0'\n+CD6EA Created OS            03 (3) 'Unix'\n+CD6EB Extract Zip Spec      0A (10) '1.0'\n+CD6EC Extract OS            00 (0) 'MS-DOS'\n+CD6ED General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD171 Compression Method    0000 (0) 'Stored'\n-CD173 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD177 CRC                   00000000 (0)\n-CD17B Compressed Size       00000000 (0)\n-CD17F Uncompressed Size     00000000 (0)\n-CD183 Filename Length       0028 (40)\n-CD185 Extra Length          0000 (0)\n-CD187 Comment Length        0000 (0)\n-CD189 Disk Start            0000 (0)\n-CD18B Int File Attributes   0000 (0)\n+CD6EF Compression Method    0000 (0) 'Stored'\n+CD6F1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD6F5 CRC                   00000000 (0)\n+CD6F9 Compressed Size       00000000 (0)\n+CD6FD Uncompressed Size     00000000 (0)\n+CD701 Filename Length       0028 (40)\n+CD703 Extra Length          0000 (0)\n+CD705 Comment Length        0000 (0)\n+CD707 Disk Start            0000 (0)\n+CD709 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD18D Ext File Attributes   41ED0010 (1106051088)\n+CD70B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD191 Local Header Offset   00002FB3 (12211)\n-CD195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD70F Local Header Offset   00002FB3 (12211)\n+CD713 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD713: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD195: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD713: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD16D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD6EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD1BD CENTRAL HEADER #111   02014B50 (33639248)\n-CD1C1 Created Zip Spec      14 (20) '2.0'\n-CD1C2 Created OS            03 (3) 'Unix'\n-CD1C3 Extract Zip Spec      0A (10) '1.0'\n-CD1C4 Extract OS            00 (0) 'MS-DOS'\n-CD1C5 General Purpose Flag  0800 (2048)\n+CD73B CENTRAL HEADER #111   02014B50 (33639248)\n+CD73F Created Zip Spec      14 (20) '2.0'\n+CD740 Created OS            03 (3) 'Unix'\n+CD741 Extract Zip Spec      0A (10) '1.0'\n+CD742 Extract OS            00 (0) 'MS-DOS'\n+CD743 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD1C7 Compression Method    0000 (0) 'Stored'\n-CD1C9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD1CD CRC                   00000000 (0)\n-CD1D1 Compressed Size       00000000 (0)\n-CD1D5 Uncompressed Size     00000000 (0)\n-CD1D9 Filename Length       0031 (49)\n-CD1DB Extra Length          0000 (0)\n-CD1DD Comment Length        0000 (0)\n-CD1DF Disk Start            0000 (0)\n-CD1E1 Int File Attributes   0000 (0)\n+CD745 Compression Method    0000 (0) 'Stored'\n+CD747 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD74B CRC                   00000000 (0)\n+CD74F Compressed Size       00000000 (0)\n+CD753 Uncompressed Size     00000000 (0)\n+CD757 Filename Length       0031 (49)\n+CD759 Extra Length          0000 (0)\n+CD75B Comment Length        0000 (0)\n+CD75D Disk Start            0000 (0)\n+CD75F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD1E3 Ext File Attributes   41ED0010 (1106051088)\n+CD761 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD1E7 Local Header Offset   00002FF9 (12281)\n-CD1EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD765 Local Header Offset   00002FF9 (12281)\n+CD769 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD1EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD769: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD1EB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD769: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD1C3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD741: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD21C CENTRAL HEADER #112   02014B50 (33639248)\n-CD220 Created Zip Spec      14 (20) '2.0'\n-CD221 Created OS            03 (3) 'Unix'\n-CD222 Extract Zip Spec      0A (10) '1.0'\n-CD223 Extract OS            00 (0) 'MS-DOS'\n-CD224 General Purpose Flag  0800 (2048)\n+CD79A CENTRAL HEADER #112   02014B50 (33639248)\n+CD79E Created Zip Spec      14 (20) '2.0'\n+CD79F Created OS            03 (3) 'Unix'\n+CD7A0 Extract Zip Spec      0A (10) '1.0'\n+CD7A1 Extract OS            00 (0) 'MS-DOS'\n+CD7A2 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD226 Compression Method    0000 (0) 'Stored'\n-CD228 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD22C CRC                   00000000 (0)\n-CD230 Compressed Size       00000000 (0)\n-CD234 Uncompressed Size     00000000 (0)\n-CD238 Filename Length       0070 (112)\n-CD23A Extra Length          0000 (0)\n-CD23C Comment Length        0000 (0)\n-CD23E Disk Start            0000 (0)\n-CD240 Int File Attributes   0000 (0)\n+CD7A4 Compression Method    0000 (0) 'Stored'\n+CD7A6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD7AA CRC                   00000000 (0)\n+CD7AE Compressed Size       00000000 (0)\n+CD7B2 Uncompressed Size     00000000 (0)\n+CD7B6 Filename Length       0070 (112)\n+CD7B8 Extra Length          0000 (0)\n+CD7BA Comment Length        0000 (0)\n+CD7BC Disk Start            0000 (0)\n+CD7BE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD242 Ext File Attributes   41ED0010 (1106051088)\n+CD7C0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD246 Local Header Offset   00003048 (12360)\n-CD24A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD7C4 Local Header Offset   00003048 (12360)\n+CD7C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD24A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD7C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD24A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD7C8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD222: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD7A0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD2BA CENTRAL HEADER #113   02014B50 (33639248)\n-CD2BE Created Zip Spec      14 (20) '2.0'\n-CD2BF Created OS            03 (3) 'Unix'\n-CD2C0 Extract Zip Spec      0A (10) '1.0'\n-CD2C1 Extract OS            00 (0) 'MS-DOS'\n-CD2C2 General Purpose Flag  0800 (2048)\n+CD838 CENTRAL HEADER #113   02014B50 (33639248)\n+CD83C Created Zip Spec      14 (20) '2.0'\n+CD83D Created OS            03 (3) 'Unix'\n+CD83E Extract Zip Spec      0A (10) '1.0'\n+CD83F Extract OS            00 (0) 'MS-DOS'\n+CD840 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD2C4 Compression Method    0000 (0) 'Stored'\n-CD2C6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD2CA CRC                   00000000 (0)\n-CD2CE Compressed Size       00000000 (0)\n-CD2D2 Uncompressed Size     00000000 (0)\n-CD2D6 Filename Length       006A (106)\n-CD2D8 Extra Length          0000 (0)\n-CD2DA Comment Length        0000 (0)\n-CD2DC Disk Start            0000 (0)\n-CD2DE Int File Attributes   0000 (0)\n+CD842 Compression Method    0000 (0) 'Stored'\n+CD844 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD848 CRC                   00000000 (0)\n+CD84C Compressed Size       00000000 (0)\n+CD850 Uncompressed Size     00000000 (0)\n+CD854 Filename Length       006A (106)\n+CD856 Extra Length          0000 (0)\n+CD858 Comment Length        0000 (0)\n+CD85A Disk Start            0000 (0)\n+CD85C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD2E0 Ext File Attributes   41ED0010 (1106051088)\n+CD85E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD2E4 Local Header Offset   000030D6 (12502)\n-CD2E8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD862 Local Header Offset   000030D6 (12502)\n+CD866 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD2E8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD866: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD2E8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD866: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD2C0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD83E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD352 CENTRAL HEADER #114   02014B50 (33639248)\n-CD356 Created Zip Spec      14 (20) '2.0'\n-CD357 Created OS            03 (3) 'Unix'\n-CD358 Extract Zip Spec      0A (10) '1.0'\n-CD359 Extract OS            00 (0) 'MS-DOS'\n-CD35A General Purpose Flag  0800 (2048)\n+CD8D0 CENTRAL HEADER #114   02014B50 (33639248)\n+CD8D4 Created Zip Spec      14 (20) '2.0'\n+CD8D5 Created OS            03 (3) 'Unix'\n+CD8D6 Extract Zip Spec      0A (10) '1.0'\n+CD8D7 Extract OS            00 (0) 'MS-DOS'\n+CD8D8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD35C Compression Method    0000 (0) 'Stored'\n-CD35E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD362 CRC                   00000000 (0)\n-CD366 Compressed Size       00000000 (0)\n-CD36A Uncompressed Size     00000000 (0)\n-CD36E Filename Length       0070 (112)\n-CD370 Extra Length          0000 (0)\n-CD372 Comment Length        0000 (0)\n-CD374 Disk Start            0000 (0)\n-CD376 Int File Attributes   0000 (0)\n+CD8DA Compression Method    0000 (0) 'Stored'\n+CD8DC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD8E0 CRC                   00000000 (0)\n+CD8E4 Compressed Size       00000000 (0)\n+CD8E8 Uncompressed Size     00000000 (0)\n+CD8EC Filename Length       0070 (112)\n+CD8EE Extra Length          0000 (0)\n+CD8F0 Comment Length        0000 (0)\n+CD8F2 Disk Start            0000 (0)\n+CD8F4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD378 Ext File Attributes   41ED0010 (1106051088)\n+CD8F6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD37C Local Header Offset   0000315E (12638)\n-CD380 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD8FA Local Header Offset   0000315E (12638)\n+CD8FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD380: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD8FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD380: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD8FE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD358: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD8D6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD3F0 CENTRAL HEADER #115   02014B50 (33639248)\n-CD3F4 Created Zip Spec      14 (20) '2.0'\n-CD3F5 Created OS            03 (3) 'Unix'\n-CD3F6 Extract Zip Spec      0A (10) '1.0'\n-CD3F7 Extract OS            00 (0) 'MS-DOS'\n-CD3F8 General Purpose Flag  0800 (2048)\n+CD96E CENTRAL HEADER #115   02014B50 (33639248)\n+CD972 Created Zip Spec      14 (20) '2.0'\n+CD973 Created OS            03 (3) 'Unix'\n+CD974 Extract Zip Spec      0A (10) '1.0'\n+CD975 Extract OS            00 (0) 'MS-DOS'\n+CD976 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD3FA Compression Method    0000 (0) 'Stored'\n-CD3FC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD400 CRC                   00000000 (0)\n-CD404 Compressed Size       00000000 (0)\n-CD408 Uncompressed Size     00000000 (0)\n-CD40C Filename Length       006A (106)\n-CD40E Extra Length          0000 (0)\n-CD410 Comment Length        0000 (0)\n-CD412 Disk Start            0000 (0)\n-CD414 Int File Attributes   0000 (0)\n+CD978 Compression Method    0000 (0) 'Stored'\n+CD97A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CD97E CRC                   00000000 (0)\n+CD982 Compressed Size       00000000 (0)\n+CD986 Uncompressed Size     00000000 (0)\n+CD98A Filename Length       006A (106)\n+CD98C Extra Length          0000 (0)\n+CD98E Comment Length        0000 (0)\n+CD990 Disk Start            0000 (0)\n+CD992 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD416 Ext File Attributes   41ED0010 (1106051088)\n+CD994 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD41A Local Header Offset   000031EC (12780)\n-CD41E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CD998 Local Header Offset   000031EC (12780)\n+CD99C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD41E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD99C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD41E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCD99C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD3F6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCD974: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD488 CENTRAL HEADER #116   02014B50 (33639248)\n-CD48C Created Zip Spec      14 (20) '2.0'\n-CD48D Created OS            03 (3) 'Unix'\n-CD48E Extract Zip Spec      0A (10) '1.0'\n-CD48F Extract OS            00 (0) 'MS-DOS'\n-CD490 General Purpose Flag  0800 (2048)\n+CDA06 CENTRAL HEADER #116   02014B50 (33639248)\n+CDA0A Created Zip Spec      14 (20) '2.0'\n+CDA0B Created OS            03 (3) 'Unix'\n+CDA0C Extract Zip Spec      0A (10) '1.0'\n+CDA0D Extract OS            00 (0) 'MS-DOS'\n+CDA0E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD492 Compression Method    0000 (0) 'Stored'\n-CD494 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD498 CRC                   00000000 (0)\n-CD49C Compressed Size       00000000 (0)\n-CD4A0 Uncompressed Size     00000000 (0)\n-CD4A4 Filename Length       002E (46)\n-CD4A6 Extra Length          0000 (0)\n-CD4A8 Comment Length        0000 (0)\n-CD4AA Disk Start            0000 (0)\n-CD4AC Int File Attributes   0000 (0)\n+CDA10 Compression Method    0000 (0) 'Stored'\n+CDA12 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDA16 CRC                   00000000 (0)\n+CDA1A Compressed Size       00000000 (0)\n+CDA1E Uncompressed Size     00000000 (0)\n+CDA22 Filename Length       002E (46)\n+CDA24 Extra Length          0000 (0)\n+CDA26 Comment Length        0000 (0)\n+CDA28 Disk Start            0000 (0)\n+CDA2A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD4AE Ext File Attributes   41ED0010 (1106051088)\n+CDA2C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD4B2 Local Header Offset   00003274 (12916)\n-CD4B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDA30 Local Header Offset   00003274 (12916)\n+CDA34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD4B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDA34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD4B6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDA34: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD48E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDA0C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD4E4 CENTRAL HEADER #117   02014B50 (33639248)\n-CD4E8 Created Zip Spec      14 (20) '2.0'\n-CD4E9 Created OS            03 (3) 'Unix'\n-CD4EA Extract Zip Spec      0A (10) '1.0'\n-CD4EB Extract OS            00 (0) 'MS-DOS'\n-CD4EC General Purpose Flag  0800 (2048)\n+CDA62 CENTRAL HEADER #117   02014B50 (33639248)\n+CDA66 Created Zip Spec      14 (20) '2.0'\n+CDA67 Created OS            03 (3) 'Unix'\n+CDA68 Extract Zip Spec      0A (10) '1.0'\n+CDA69 Extract OS            00 (0) 'MS-DOS'\n+CDA6A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD4EE Compression Method    0000 (0) 'Stored'\n-CD4F0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD4F4 CRC                   00000000 (0)\n-CD4F8 Compressed Size       00000000 (0)\n-CD4FC Uncompressed Size     00000000 (0)\n-CD500 Filename Length       0037 (55)\n-CD502 Extra Length          0000 (0)\n-CD504 Comment Length        0000 (0)\n-CD506 Disk Start            0000 (0)\n-CD508 Int File Attributes   0000 (0)\n+CDA6C Compression Method    0000 (0) 'Stored'\n+CDA6E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDA72 CRC                   00000000 (0)\n+CDA76 Compressed Size       00000000 (0)\n+CDA7A Uncompressed Size     00000000 (0)\n+CDA7E Filename Length       0037 (55)\n+CDA80 Extra Length          0000 (0)\n+CDA82 Comment Length        0000 (0)\n+CDA84 Disk Start            0000 (0)\n+CDA86 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD50A Ext File Attributes   41ED0010 (1106051088)\n+CDA88 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD50E Local Header Offset   000032C0 (12992)\n-CD512 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDA8C Local Header Offset   000032C0 (12992)\n+CDA90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD512: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDA90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD512: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDA90: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD4EA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDA68: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD549 CENTRAL HEADER #118   02014B50 (33639248)\n-CD54D Created Zip Spec      14 (20) '2.0'\n-CD54E Created OS            03 (3) 'Unix'\n-CD54F Extract Zip Spec      0A (10) '1.0'\n-CD550 Extract OS            00 (0) 'MS-DOS'\n-CD551 General Purpose Flag  0800 (2048)\n+CDAC7 CENTRAL HEADER #118   02014B50 (33639248)\n+CDACB Created Zip Spec      14 (20) '2.0'\n+CDACC Created OS            03 (3) 'Unix'\n+CDACD Extract Zip Spec      0A (10) '1.0'\n+CDACE Extract OS            00 (0) 'MS-DOS'\n+CDACF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD553 Compression Method    0000 (0) 'Stored'\n-CD555 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD559 CRC                   00000000 (0)\n-CD55D Compressed Size       00000000 (0)\n-CD561 Uncompressed Size     00000000 (0)\n-CD565 Filename Length       0060 (96)\n-CD567 Extra Length          0000 (0)\n-CD569 Comment Length        0000 (0)\n-CD56B Disk Start            0000 (0)\n-CD56D Int File Attributes   0000 (0)\n+CDAD1 Compression Method    0000 (0) 'Stored'\n+CDAD3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDAD7 CRC                   00000000 (0)\n+CDADB Compressed Size       00000000 (0)\n+CDADF Uncompressed Size     00000000 (0)\n+CDAE3 Filename Length       0060 (96)\n+CDAE5 Extra Length          0000 (0)\n+CDAE7 Comment Length        0000 (0)\n+CDAE9 Disk Start            0000 (0)\n+CDAEB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD56F Ext File Attributes   41ED0010 (1106051088)\n+CDAED Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD573 Local Header Offset   00003315 (13077)\n-CD577 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDAF1 Local Header Offset   00003315 (13077)\n+CDAF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD577: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDAF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD577: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDAF5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD54F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDACD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD5D7 CENTRAL HEADER #119   02014B50 (33639248)\n-CD5DB Created Zip Spec      14 (20) '2.0'\n-CD5DC Created OS            03 (3) 'Unix'\n-CD5DD Extract Zip Spec      0A (10) '1.0'\n-CD5DE Extract OS            00 (0) 'MS-DOS'\n-CD5DF General Purpose Flag  0800 (2048)\n+CDB55 CENTRAL HEADER #119   02014B50 (33639248)\n+CDB59 Created Zip Spec      14 (20) '2.0'\n+CDB5A Created OS            03 (3) 'Unix'\n+CDB5B Extract Zip Spec      0A (10) '1.0'\n+CDB5C Extract OS            00 (0) 'MS-DOS'\n+CDB5D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD5E1 Compression Method    0000 (0) 'Stored'\n-CD5E3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD5E7 CRC                   00000000 (0)\n-CD5EB Compressed Size       00000000 (0)\n-CD5EF Uncompressed Size     00000000 (0)\n-CD5F3 Filename Length       0066 (102)\n-CD5F5 Extra Length          0000 (0)\n-CD5F7 Comment Length        0000 (0)\n-CD5F9 Disk Start            0000 (0)\n-CD5FB Int File Attributes   0000 (0)\n+CDB5F Compression Method    0000 (0) 'Stored'\n+CDB61 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDB65 CRC                   00000000 (0)\n+CDB69 Compressed Size       00000000 (0)\n+CDB6D Uncompressed Size     00000000 (0)\n+CDB71 Filename Length       0066 (102)\n+CDB73 Extra Length          0000 (0)\n+CDB75 Comment Length        0000 (0)\n+CDB77 Disk Start            0000 (0)\n+CDB79 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD5FD Ext File Attributes   41ED0010 (1106051088)\n+CDB7B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD601 Local Header Offset   00003393 (13203)\n-CD605 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDB7F Local Header Offset   00003393 (13203)\n+CDB83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD605: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDB83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD605: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDB83: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD5DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDB5B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD66B CENTRAL HEADER #120   02014B50 (33639248)\n-CD66F Created Zip Spec      14 (20) '2.0'\n-CD670 Created OS            03 (3) 'Unix'\n-CD671 Extract Zip Spec      0A (10) '1.0'\n-CD672 Extract OS            00 (0) 'MS-DOS'\n-CD673 General Purpose Flag  0800 (2048)\n+CDBE9 CENTRAL HEADER #120   02014B50 (33639248)\n+CDBED Created Zip Spec      14 (20) '2.0'\n+CDBEE Created OS            03 (3) 'Unix'\n+CDBEF Extract Zip Spec      0A (10) '1.0'\n+CDBF0 Extract OS            00 (0) 'MS-DOS'\n+CDBF1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD675 Compression Method    0000 (0) 'Stored'\n-CD677 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD67B CRC                   00000000 (0)\n-CD67F Compressed Size       00000000 (0)\n-CD683 Uncompressed Size     00000000 (0)\n-CD687 Filename Length       0026 (38)\n-CD689 Extra Length          0000 (0)\n-CD68B Comment Length        0000 (0)\n-CD68D Disk Start            0000 (0)\n-CD68F Int File Attributes   0000 (0)\n+CDBF3 Compression Method    0000 (0) 'Stored'\n+CDBF5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDBF9 CRC                   00000000 (0)\n+CDBFD Compressed Size       00000000 (0)\n+CDC01 Uncompressed Size     00000000 (0)\n+CDC05 Filename Length       0026 (38)\n+CDC07 Extra Length          0000 (0)\n+CDC09 Comment Length        0000 (0)\n+CDC0B Disk Start            0000 (0)\n+CDC0D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD691 Ext File Attributes   41ED0010 (1106051088)\n+CDC0F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD695 Local Header Offset   00003417 (13335)\n-CD699 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDC13 Local Header Offset   00003417 (13335)\n+CDC17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD699: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDC17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD699: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDC17: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD671: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDBEF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD6BF CENTRAL HEADER #121   02014B50 (33639248)\n-CD6C3 Created Zip Spec      14 (20) '2.0'\n-CD6C4 Created OS            03 (3) 'Unix'\n-CD6C5 Extract Zip Spec      0A (10) '1.0'\n-CD6C6 Extract OS            00 (0) 'MS-DOS'\n-CD6C7 General Purpose Flag  0800 (2048)\n+CDC3D CENTRAL HEADER #121   02014B50 (33639248)\n+CDC41 Created Zip Spec      14 (20) '2.0'\n+CDC42 Created OS            03 (3) 'Unix'\n+CDC43 Extract Zip Spec      0A (10) '1.0'\n+CDC44 Extract OS            00 (0) 'MS-DOS'\n+CDC45 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD6C9 Compression Method    0000 (0) 'Stored'\n-CD6CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD6CF CRC                   00000000 (0)\n-CD6D3 Compressed Size       00000000 (0)\n-CD6D7 Uncompressed Size     00000000 (0)\n-CD6DB Filename Length       002F (47)\n-CD6DD Extra Length          0000 (0)\n-CD6DF Comment Length        0000 (0)\n-CD6E1 Disk Start            0000 (0)\n-CD6E3 Int File Attributes   0000 (0)\n+CDC47 Compression Method    0000 (0) 'Stored'\n+CDC49 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDC4D CRC                   00000000 (0)\n+CDC51 Compressed Size       00000000 (0)\n+CDC55 Uncompressed Size     00000000 (0)\n+CDC59 Filename Length       002F (47)\n+CDC5B Extra Length          0000 (0)\n+CDC5D Comment Length        0000 (0)\n+CDC5F Disk Start            0000 (0)\n+CDC61 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD6E5 Ext File Attributes   41ED0010 (1106051088)\n+CDC63 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD6E9 Local Header Offset   0000345B (13403)\n-CD6ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDC67 Local Header Offset   0000345B (13403)\n+CDC6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD6ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDC6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD6ED: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDC6B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD6C5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDC43: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD71C CENTRAL HEADER #122   02014B50 (33639248)\n-CD720 Created Zip Spec      14 (20) '2.0'\n-CD721 Created OS            03 (3) 'Unix'\n-CD722 Extract Zip Spec      0A (10) '1.0'\n-CD723 Extract OS            00 (0) 'MS-DOS'\n-CD724 General Purpose Flag  0800 (2048)\n+CDC9A CENTRAL HEADER #122   02014B50 (33639248)\n+CDC9E Created Zip Spec      14 (20) '2.0'\n+CDC9F Created OS            03 (3) 'Unix'\n+CDCA0 Extract Zip Spec      0A (10) '1.0'\n+CDCA1 Extract OS            00 (0) 'MS-DOS'\n+CDCA2 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD726 Compression Method    0000 (0) 'Stored'\n-CD728 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD72C CRC                   00000000 (0)\n-CD730 Compressed Size       00000000 (0)\n-CD734 Uncompressed Size     00000000 (0)\n-CD738 Filename Length       005E (94)\n-CD73A Extra Length          0000 (0)\n-CD73C Comment Length        0000 (0)\n-CD73E Disk Start            0000 (0)\n-CD740 Int File Attributes   0000 (0)\n+CDCA4 Compression Method    0000 (0) 'Stored'\n+CDCA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDCAA CRC                   00000000 (0)\n+CDCAE Compressed Size       00000000 (0)\n+CDCB2 Uncompressed Size     00000000 (0)\n+CDCB6 Filename Length       005E (94)\n+CDCB8 Extra Length          0000 (0)\n+CDCBA Comment Length        0000 (0)\n+CDCBC Disk Start            0000 (0)\n+CDCBE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD742 Ext File Attributes   41ED0010 (1106051088)\n+CDCC0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD746 Local Header Offset   000034A8 (13480)\n-CD74A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDCC4 Local Header Offset   000034A8 (13480)\n+CDCC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD74A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDCC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD74A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDCC8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD722: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDCA0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD7A8 CENTRAL HEADER #123   02014B50 (33639248)\n-CD7AC Created Zip Spec      14 (20) '2.0'\n-CD7AD Created OS            03 (3) 'Unix'\n-CD7AE Extract Zip Spec      0A (10) '1.0'\n-CD7AF Extract OS            00 (0) 'MS-DOS'\n-CD7B0 General Purpose Flag  0800 (2048)\n+CDD26 CENTRAL HEADER #123   02014B50 (33639248)\n+CDD2A Created Zip Spec      14 (20) '2.0'\n+CDD2B Created OS            03 (3) 'Unix'\n+CDD2C Extract Zip Spec      0A (10) '1.0'\n+CDD2D Extract OS            00 (0) 'MS-DOS'\n+CDD2E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD7B2 Compression Method    0000 (0) 'Stored'\n-CD7B4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD7B8 CRC                   00000000 (0)\n-CD7BC Compressed Size       00000000 (0)\n-CD7C0 Uncompressed Size     00000000 (0)\n-CD7C4 Filename Length       005B (91)\n-CD7C6 Extra Length          0000 (0)\n-CD7C8 Comment Length        0000 (0)\n-CD7CA Disk Start            0000 (0)\n-CD7CC Int File Attributes   0000 (0)\n+CDD30 Compression Method    0000 (0) 'Stored'\n+CDD32 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDD36 CRC                   00000000 (0)\n+CDD3A Compressed Size       00000000 (0)\n+CDD3E Uncompressed Size     00000000 (0)\n+CDD42 Filename Length       005B (91)\n+CDD44 Extra Length          0000 (0)\n+CDD46 Comment Length        0000 (0)\n+CDD48 Disk Start            0000 (0)\n+CDD4A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD7CE Ext File Attributes   41ED0010 (1106051088)\n+CDD4C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD7D2 Local Header Offset   00003524 (13604)\n-CD7D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDD50 Local Header Offset   00003524 (13604)\n+CDD54 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD7D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDD54: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD7D6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDD54: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD7AE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDD2C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD831 CENTRAL HEADER #124   02014B50 (33639248)\n-CD835 Created Zip Spec      14 (20) '2.0'\n-CD836 Created OS            03 (3) 'Unix'\n-CD837 Extract Zip Spec      0A (10) '1.0'\n-CD838 Extract OS            00 (0) 'MS-DOS'\n-CD839 General Purpose Flag  0800 (2048)\n+CDDAF CENTRAL HEADER #124   02014B50 (33639248)\n+CDDB3 Created Zip Spec      14 (20) '2.0'\n+CDDB4 Created OS            03 (3) 'Unix'\n+CDDB5 Extract Zip Spec      0A (10) '1.0'\n+CDDB6 Extract OS            00 (0) 'MS-DOS'\n+CDDB7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD83B Compression Method    0000 (0) 'Stored'\n-CD83D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD841 CRC                   00000000 (0)\n-CD845 Compressed Size       00000000 (0)\n-CD849 Uncompressed Size     00000000 (0)\n-CD84D Filename Length       0061 (97)\n-CD84F Extra Length          0000 (0)\n-CD851 Comment Length        0000 (0)\n-CD853 Disk Start            0000 (0)\n-CD855 Int File Attributes   0000 (0)\n+CDDB9 Compression Method    0000 (0) 'Stored'\n+CDDBB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDDBF CRC                   00000000 (0)\n+CDDC3 Compressed Size       00000000 (0)\n+CDDC7 Uncompressed Size     00000000 (0)\n+CDDCB Filename Length       0061 (97)\n+CDDCD Extra Length          0000 (0)\n+CDDCF Comment Length        0000 (0)\n+CDDD1 Disk Start            0000 (0)\n+CDDD3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD857 Ext File Attributes   41ED0010 (1106051088)\n+CDDD5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD85B Local Header Offset   0000359D (13725)\n-CD85F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDDD9 Local Header Offset   0000359D (13725)\n+CDDDD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD85F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDDDD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD85F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDDDD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD837: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDDB5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD8C0 CENTRAL HEADER #125   02014B50 (33639248)\n-CD8C4 Created Zip Spec      14 (20) '2.0'\n-CD8C5 Created OS            03 (3) 'Unix'\n-CD8C6 Extract Zip Spec      0A (10) '1.0'\n-CD8C7 Extract OS            00 (0) 'MS-DOS'\n-CD8C8 General Purpose Flag  0800 (2048)\n+CDE3E CENTRAL HEADER #125   02014B50 (33639248)\n+CDE42 Created Zip Spec      14 (20) '2.0'\n+CDE43 Created OS            03 (3) 'Unix'\n+CDE44 Extract Zip Spec      0A (10) '1.0'\n+CDE45 Extract OS            00 (0) 'MS-DOS'\n+CDE46 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD8CA Compression Method    0000 (0) 'Stored'\n-CD8CC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD8D0 CRC                   00000000 (0)\n-CD8D4 Compressed Size       00000000 (0)\n-CD8D8 Uncompressed Size     00000000 (0)\n-CD8DC Filename Length       005B (91)\n-CD8DE Extra Length          0000 (0)\n-CD8E0 Comment Length        0000 (0)\n-CD8E2 Disk Start            0000 (0)\n-CD8E4 Int File Attributes   0000 (0)\n+CDE48 Compression Method    0000 (0) 'Stored'\n+CDE4A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDE4E CRC                   00000000 (0)\n+CDE52 Compressed Size       00000000 (0)\n+CDE56 Uncompressed Size     00000000 (0)\n+CDE5A Filename Length       005B (91)\n+CDE5C Extra Length          0000 (0)\n+CDE5E Comment Length        0000 (0)\n+CDE60 Disk Start            0000 (0)\n+CDE62 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD8E6 Ext File Attributes   41ED0010 (1106051088)\n+CDE64 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD8EA Local Header Offset   0000361C (13852)\n-CD8EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDE68 Local Header Offset   0000361C (13852)\n+CDE6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD8EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDE6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD8EE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDE6C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD8C6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDE44: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD949 CENTRAL HEADER #126   02014B50 (33639248)\n-CD94D Created Zip Spec      14 (20) '2.0'\n-CD94E Created OS            03 (3) 'Unix'\n-CD94F Extract Zip Spec      0A (10) '1.0'\n-CD950 Extract OS            00 (0) 'MS-DOS'\n-CD951 General Purpose Flag  0800 (2048)\n+CDEC7 CENTRAL HEADER #126   02014B50 (33639248)\n+CDECB Created Zip Spec      14 (20) '2.0'\n+CDECC Created OS            03 (3) 'Unix'\n+CDECD Extract Zip Spec      0A (10) '1.0'\n+CDECE Extract OS            00 (0) 'MS-DOS'\n+CDECF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD953 Compression Method    0000 (0) 'Stored'\n-CD955 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD959 CRC                   00000000 (0)\n-CD95D Compressed Size       00000000 (0)\n-CD961 Uncompressed Size     00000000 (0)\n-CD965 Filename Length       0066 (102)\n-CD967 Extra Length          0000 (0)\n-CD969 Comment Length        0000 (0)\n-CD96B Disk Start            0000 (0)\n-CD96D Int File Attributes   0000 (0)\n+CDED1 Compression Method    0000 (0) 'Stored'\n+CDED3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDED7 CRC                   00000000 (0)\n+CDEDB Compressed Size       00000000 (0)\n+CDEDF Uncompressed Size     00000000 (0)\n+CDEE3 Filename Length       0066 (102)\n+CDEE5 Extra Length          0000 (0)\n+CDEE7 Comment Length        0000 (0)\n+CDEE9 Disk Start            0000 (0)\n+CDEEB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CD96F Ext File Attributes   41ED0010 (1106051088)\n+CDEED Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CD973 Local Header Offset   00003695 (13973)\n-CD977 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDEF1 Local Header Offset   00003695 (13973)\n+CDEF5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCD977: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDEF5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCD977: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDEF5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD94F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDECD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CD9DD CENTRAL HEADER #127   02014B50 (33639248)\n-CD9E1 Created Zip Spec      14 (20) '2.0'\n-CD9E2 Created OS            03 (3) 'Unix'\n-CD9E3 Extract Zip Spec      0A (10) '1.0'\n-CD9E4 Extract OS            00 (0) 'MS-DOS'\n-CD9E5 General Purpose Flag  0800 (2048)\n+CDF5B CENTRAL HEADER #127   02014B50 (33639248)\n+CDF5F Created Zip Spec      14 (20) '2.0'\n+CDF60 Created OS            03 (3) 'Unix'\n+CDF61 Extract Zip Spec      0A (10) '1.0'\n+CDF62 Extract OS            00 (0) 'MS-DOS'\n+CDF63 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CD9E7 Compression Method    0000 (0) 'Stored'\n-CD9E9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CD9ED CRC                   00000000 (0)\n-CD9F1 Compressed Size       00000000 (0)\n-CD9F5 Uncompressed Size     00000000 (0)\n-CD9F9 Filename Length       0066 (102)\n-CD9FB Extra Length          0000 (0)\n-CD9FD Comment Length        0000 (0)\n-CD9FF Disk Start            0000 (0)\n-CDA01 Int File Attributes   0000 (0)\n+CDF65 Compression Method    0000 (0) 'Stored'\n+CDF67 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDF6B CRC                   00000000 (0)\n+CDF6F Compressed Size       00000000 (0)\n+CDF73 Uncompressed Size     00000000 (0)\n+CDF77 Filename Length       0066 (102)\n+CDF79 Extra Length          0000 (0)\n+CDF7B Comment Length        0000 (0)\n+CDF7D Disk Start            0000 (0)\n+CDF7F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDA03 Ext File Attributes   41ED0010 (1106051088)\n+CDF81 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDA07 Local Header Offset   00003719 (14105)\n-CDA0B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CDF85 Local Header Offset   00003719 (14105)\n+CDF89 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDA0B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDF89: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDA0B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCDF89: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCD9E3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDF61: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDA71 CENTRAL HEADER #128   02014B50 (33639248)\n-CDA75 Created Zip Spec      14 (20) '2.0'\n-CDA76 Created OS            03 (3) 'Unix'\n-CDA77 Extract Zip Spec      0A (10) '1.0'\n-CDA78 Extract OS            00 (0) 'MS-DOS'\n-CDA79 General Purpose Flag  0800 (2048)\n+CDFEF CENTRAL HEADER #128   02014B50 (33639248)\n+CDFF3 Created Zip Spec      14 (20) '2.0'\n+CDFF4 Created OS            03 (3) 'Unix'\n+CDFF5 Extract Zip Spec      0A (10) '1.0'\n+CDFF6 Extract OS            00 (0) 'MS-DOS'\n+CDFF7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDA7B Compression Method    0000 (0) 'Stored'\n-CDA7D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDA81 CRC                   00000000 (0)\n-CDA85 Compressed Size       00000000 (0)\n-CDA89 Uncompressed Size     00000000 (0)\n-CDA8D Filename Length       0065 (101)\n-CDA8F Extra Length          0000 (0)\n-CDA91 Comment Length        0000 (0)\n-CDA93 Disk Start            0000 (0)\n-CDA95 Int File Attributes   0000 (0)\n+CDFF9 Compression Method    0000 (0) 'Stored'\n+CDFFB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CDFFF CRC                   00000000 (0)\n+CE003 Compressed Size       00000000 (0)\n+CE007 Uncompressed Size     00000000 (0)\n+CE00B Filename Length       0065 (101)\n+CE00D Extra Length          0000 (0)\n+CE00F Comment Length        0000 (0)\n+CE011 Disk Start            0000 (0)\n+CE013 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDA97 Ext File Attributes   41ED0010 (1106051088)\n+CE015 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDA9B Local Header Offset   0000379D (14237)\n-CDA9F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE019 Local Header Offset   0000379D (14237)\n+CE01D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDA9F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE01D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDA9F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE01D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDA77: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCDFF5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDB04 CENTRAL HEADER #129   02014B50 (33639248)\n-CDB08 Created Zip Spec      14 (20) '2.0'\n-CDB09 Created OS            03 (3) 'Unix'\n-CDB0A Extract Zip Spec      0A (10) '1.0'\n-CDB0B Extract OS            00 (0) 'MS-DOS'\n-CDB0C General Purpose Flag  0800 (2048)\n+CE082 CENTRAL HEADER #129   02014B50 (33639248)\n+CE086 Created Zip Spec      14 (20) '2.0'\n+CE087 Created OS            03 (3) 'Unix'\n+CE088 Extract Zip Spec      0A (10) '1.0'\n+CE089 Extract OS            00 (0) 'MS-DOS'\n+CE08A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDB0E Compression Method    0000 (0) 'Stored'\n-CDB10 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDB14 CRC                   00000000 (0)\n-CDB18 Compressed Size       00000000 (0)\n-CDB1C Uncompressed Size     00000000 (0)\n-CDB20 Filename Length       0063 (99)\n-CDB22 Extra Length          0000 (0)\n-CDB24 Comment Length        0000 (0)\n-CDB26 Disk Start            0000 (0)\n-CDB28 Int File Attributes   0000 (0)\n+CE08C Compression Method    0000 (0) 'Stored'\n+CE08E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE092 CRC                   00000000 (0)\n+CE096 Compressed Size       00000000 (0)\n+CE09A Uncompressed Size     00000000 (0)\n+CE09E Filename Length       0063 (99)\n+CE0A0 Extra Length          0000 (0)\n+CE0A2 Comment Length        0000 (0)\n+CE0A4 Disk Start            0000 (0)\n+CE0A6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDB2A Ext File Attributes   41ED0010 (1106051088)\n+CE0A8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDB2E Local Header Offset   00003820 (14368)\n-CDB32 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE0AC Local Header Offset   00003820 (14368)\n+CE0B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDB32: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE0B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDB32: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE0B0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDB0A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE088: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDB95 CENTRAL HEADER #130   02014B50 (33639248)\n-CDB99 Created Zip Spec      14 (20) '2.0'\n-CDB9A Created OS            03 (3) 'Unix'\n-CDB9B Extract Zip Spec      0A (10) '1.0'\n-CDB9C Extract OS            00 (0) 'MS-DOS'\n-CDB9D General Purpose Flag  0800 (2048)\n+CE113 CENTRAL HEADER #130   02014B50 (33639248)\n+CE117 Created Zip Spec      14 (20) '2.0'\n+CE118 Created OS            03 (3) 'Unix'\n+CE119 Extract Zip Spec      0A (10) '1.0'\n+CE11A Extract OS            00 (0) 'MS-DOS'\n+CE11B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDB9F Compression Method    0000 (0) 'Stored'\n-CDBA1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDBA5 CRC                   00000000 (0)\n-CDBA9 Compressed Size       00000000 (0)\n-CDBAD Uncompressed Size     00000000 (0)\n-CDBB1 Filename Length       0023 (35)\n-CDBB3 Extra Length          0000 (0)\n-CDBB5 Comment Length        0000 (0)\n-CDBB7 Disk Start            0000 (0)\n-CDBB9 Int File Attributes   0000 (0)\n+CE11D Compression Method    0000 (0) 'Stored'\n+CE11F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE123 CRC                   00000000 (0)\n+CE127 Compressed Size       00000000 (0)\n+CE12B Uncompressed Size     00000000 (0)\n+CE12F Filename Length       0023 (35)\n+CE131 Extra Length          0000 (0)\n+CE133 Comment Length        0000 (0)\n+CE135 Disk Start            0000 (0)\n+CE137 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDBBB Ext File Attributes   41ED0010 (1106051088)\n+CE139 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDBBF Local Header Offset   000038A1 (14497)\n-CDBC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE13D Local Header Offset   000038A1 (14497)\n+CE141 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDBC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE141: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDBC3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE141: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDB9B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE119: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDBE6 CENTRAL HEADER #131   02014B50 (33639248)\n-CDBEA Created Zip Spec      14 (20) '2.0'\n-CDBEB Created OS            03 (3) 'Unix'\n-CDBEC Extract Zip Spec      0A (10) '1.0'\n-CDBED Extract OS            00 (0) 'MS-DOS'\n-CDBEE General Purpose Flag  0800 (2048)\n+CE164 CENTRAL HEADER #131   02014B50 (33639248)\n+CE168 Created Zip Spec      14 (20) '2.0'\n+CE169 Created OS            03 (3) 'Unix'\n+CE16A Extract Zip Spec      0A (10) '1.0'\n+CE16B Extract OS            00 (0) 'MS-DOS'\n+CE16C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDBF0 Compression Method    0000 (0) 'Stored'\n-CDBF2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDBF6 CRC                   00000000 (0)\n-CDBFA Compressed Size       00000000 (0)\n-CDBFE Uncompressed Size     00000000 (0)\n-CDC02 Filename Length       002C (44)\n-CDC04 Extra Length          0000 (0)\n-CDC06 Comment Length        0000 (0)\n-CDC08 Disk Start            0000 (0)\n-CDC0A Int File Attributes   0000 (0)\n+CE16E Compression Method    0000 (0) 'Stored'\n+CE170 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE174 CRC                   00000000 (0)\n+CE178 Compressed Size       00000000 (0)\n+CE17C Uncompressed Size     00000000 (0)\n+CE180 Filename Length       002C (44)\n+CE182 Extra Length          0000 (0)\n+CE184 Comment Length        0000 (0)\n+CE186 Disk Start            0000 (0)\n+CE188 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDC0C Ext File Attributes   41ED0010 (1106051088)\n+CE18A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDC10 Local Header Offset   000038E2 (14562)\n-CDC14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE18E Local Header Offset   000038E2 (14562)\n+CE192 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDC14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE192: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDC14: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE192: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDBEC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE16A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDC40 CENTRAL HEADER #132   02014B50 (33639248)\n-CDC44 Created Zip Spec      14 (20) '2.0'\n-CDC45 Created OS            03 (3) 'Unix'\n-CDC46 Extract Zip Spec      0A (10) '1.0'\n-CDC47 Extract OS            00 (0) 'MS-DOS'\n-CDC48 General Purpose Flag  0800 (2048)\n+CE1BE CENTRAL HEADER #132   02014B50 (33639248)\n+CE1C2 Created Zip Spec      14 (20) '2.0'\n+CE1C3 Created OS            03 (3) 'Unix'\n+CE1C4 Extract Zip Spec      0A (10) '1.0'\n+CE1C5 Extract OS            00 (0) 'MS-DOS'\n+CE1C6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDC4A Compression Method    0000 (0) 'Stored'\n-CDC4C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDC50 CRC                   00000000 (0)\n-CDC54 Compressed Size       00000000 (0)\n-CDC58 Uncompressed Size     00000000 (0)\n-CDC5C Filename Length       0058 (88)\n-CDC5E Extra Length          0000 (0)\n-CDC60 Comment Length        0000 (0)\n-CDC62 Disk Start            0000 (0)\n-CDC64 Int File Attributes   0000 (0)\n+CE1C8 Compression Method    0000 (0) 'Stored'\n+CE1CA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE1CE CRC                   00000000 (0)\n+CE1D2 Compressed Size       00000000 (0)\n+CE1D6 Uncompressed Size     00000000 (0)\n+CE1DA Filename Length       0058 (88)\n+CE1DC Extra Length          0000 (0)\n+CE1DE Comment Length        0000 (0)\n+CE1E0 Disk Start            0000 (0)\n+CE1E2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDC66 Ext File Attributes   41ED0010 (1106051088)\n+CE1E4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDC6A Local Header Offset   0000392C (14636)\n-CDC6E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE1E8 Local Header Offset   0000392C (14636)\n+CE1EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDC6E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE1EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDC6E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE1EC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDC46: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE1C4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDCC6 CENTRAL HEADER #133   02014B50 (33639248)\n-CDCCA Created Zip Spec      14 (20) '2.0'\n-CDCCB Created OS            03 (3) 'Unix'\n-CDCCC Extract Zip Spec      0A (10) '1.0'\n-CDCCD Extract OS            00 (0) 'MS-DOS'\n-CDCCE General Purpose Flag  0800 (2048)\n+CE244 CENTRAL HEADER #133   02014B50 (33639248)\n+CE248 Created Zip Spec      14 (20) '2.0'\n+CE249 Created OS            03 (3) 'Unix'\n+CE24A Extract Zip Spec      0A (10) '1.0'\n+CE24B Extract OS            00 (0) 'MS-DOS'\n+CE24C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDCD0 Compression Method    0000 (0) 'Stored'\n-CDCD2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDCD6 CRC                   00000000 (0)\n-CDCDA Compressed Size       00000000 (0)\n-CDCDE Uncompressed Size     00000000 (0)\n-CDCE2 Filename Length       0031 (49)\n-CDCE4 Extra Length          0000 (0)\n-CDCE6 Comment Length        0000 (0)\n-CDCE8 Disk Start            0000 (0)\n-CDCEA Int File Attributes   0000 (0)\n+CE24E Compression Method    0000 (0) 'Stored'\n+CE250 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE254 CRC                   00000000 (0)\n+CE258 Compressed Size       00000000 (0)\n+CE25C Uncompressed Size     00000000 (0)\n+CE260 Filename Length       0031 (49)\n+CE262 Extra Length          0000 (0)\n+CE264 Comment Length        0000 (0)\n+CE266 Disk Start            0000 (0)\n+CE268 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDCEC Ext File Attributes   41ED0010 (1106051088)\n+CE26A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDCF0 Local Header Offset   000039A2 (14754)\n-CDCF4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE26E Local Header Offset   000039A2 (14754)\n+CE272 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDCF4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE272: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDCF4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE272: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDCCC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE24A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDD25 CENTRAL HEADER #134   02014B50 (33639248)\n-CDD29 Created Zip Spec      14 (20) '2.0'\n-CDD2A Created OS            03 (3) 'Unix'\n-CDD2B Extract Zip Spec      0A (10) '1.0'\n-CDD2C Extract OS            00 (0) 'MS-DOS'\n-CDD2D General Purpose Flag  0800 (2048)\n+CE2A3 CENTRAL HEADER #134   02014B50 (33639248)\n+CE2A7 Created Zip Spec      14 (20) '2.0'\n+CE2A8 Created OS            03 (3) 'Unix'\n+CE2A9 Extract Zip Spec      0A (10) '1.0'\n+CE2AA Extract OS            00 (0) 'MS-DOS'\n+CE2AB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDD2F Compression Method    0000 (0) 'Stored'\n-CDD31 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDD35 CRC                   00000000 (0)\n-CDD39 Compressed Size       00000000 (0)\n-CDD3D Uncompressed Size     00000000 (0)\n-CDD41 Filename Length       003A (58)\n-CDD43 Extra Length          0000 (0)\n-CDD45 Comment Length        0000 (0)\n-CDD47 Disk Start            0000 (0)\n-CDD49 Int File Attributes   0000 (0)\n+CE2AD Compression Method    0000 (0) 'Stored'\n+CE2AF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE2B3 CRC                   00000000 (0)\n+CE2B7 Compressed Size       00000000 (0)\n+CE2BB Uncompressed Size     00000000 (0)\n+CE2BF Filename Length       003A (58)\n+CE2C1 Extra Length          0000 (0)\n+CE2C3 Comment Length        0000 (0)\n+CE2C5 Disk Start            0000 (0)\n+CE2C7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDD4B Ext File Attributes   41ED0010 (1106051088)\n+CE2C9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDD4F Local Header Offset   000039F1 (14833)\n-CDD53 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE2CD Local Header Offset   000039F1 (14833)\n+CE2D1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDD53: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE2D1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDD53: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE2D1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDD2B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE2A9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDD8D CENTRAL HEADER #135   02014B50 (33639248)\n-CDD91 Created Zip Spec      14 (20) '2.0'\n-CDD92 Created OS            03 (3) 'Unix'\n-CDD93 Extract Zip Spec      0A (10) '1.0'\n-CDD94 Extract OS            00 (0) 'MS-DOS'\n-CDD95 General Purpose Flag  0800 (2048)\n+CE30B CENTRAL HEADER #135   02014B50 (33639248)\n+CE30F Created Zip Spec      14 (20) '2.0'\n+CE310 Created OS            03 (3) 'Unix'\n+CE311 Extract Zip Spec      0A (10) '1.0'\n+CE312 Extract OS            00 (0) 'MS-DOS'\n+CE313 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDD97 Compression Method    0000 (0) 'Stored'\n-CDD99 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDD9D CRC                   00000000 (0)\n-CDDA1 Compressed Size       00000000 (0)\n-CDDA5 Uncompressed Size     00000000 (0)\n-CDDA9 Filename Length       006C (108)\n-CDDAB Extra Length          0000 (0)\n-CDDAD Comment Length        0000 (0)\n-CDDAF Disk Start            0000 (0)\n-CDDB1 Int File Attributes   0000 (0)\n+CE315 Compression Method    0000 (0) 'Stored'\n+CE317 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE31B CRC                   00000000 (0)\n+CE31F Compressed Size       00000000 (0)\n+CE323 Uncompressed Size     00000000 (0)\n+CE327 Filename Length       006C (108)\n+CE329 Extra Length          0000 (0)\n+CE32B Comment Length        0000 (0)\n+CE32D Disk Start            0000 (0)\n+CE32F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDDB3 Ext File Attributes   41ED0010 (1106051088)\n+CE331 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDDB7 Local Header Offset   00003A49 (14921)\n-CDDBB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE335 Local Header Offset   00003A49 (14921)\n+CE339 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDDBB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE339: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDDBB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE339: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDD93: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE311: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDE27 CENTRAL HEADER #136   02014B50 (33639248)\n-CDE2B Created Zip Spec      14 (20) '2.0'\n-CDE2C Created OS            03 (3) 'Unix'\n-CDE2D Extract Zip Spec      0A (10) '1.0'\n-CDE2E Extract OS            00 (0) 'MS-DOS'\n-CDE2F General Purpose Flag  0800 (2048)\n+CE3A5 CENTRAL HEADER #136   02014B50 (33639248)\n+CE3A9 Created Zip Spec      14 (20) '2.0'\n+CE3AA Created OS            03 (3) 'Unix'\n+CE3AB Extract Zip Spec      0A (10) '1.0'\n+CE3AC Extract OS            00 (0) 'MS-DOS'\n+CE3AD General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDE31 Compression Method    0000 (0) 'Stored'\n-CDE33 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDE37 CRC                   00000000 (0)\n-CDE3B Compressed Size       00000000 (0)\n-CDE3F Uncompressed Size     00000000 (0)\n-CDE43 Filename Length       0022 (34)\n-CDE45 Extra Length          0000 (0)\n-CDE47 Comment Length        0000 (0)\n-CDE49 Disk Start            0000 (0)\n-CDE4B Int File Attributes   0000 (0)\n+CE3AF Compression Method    0000 (0) 'Stored'\n+CE3B1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE3B5 CRC                   00000000 (0)\n+CE3B9 Compressed Size       00000000 (0)\n+CE3BD Uncompressed Size     00000000 (0)\n+CE3C1 Filename Length       0022 (34)\n+CE3C3 Extra Length          0000 (0)\n+CE3C5 Comment Length        0000 (0)\n+CE3C7 Disk Start            0000 (0)\n+CE3C9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDE4D Ext File Attributes   41ED0010 (1106051088)\n+CE3CB Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDE51 Local Header Offset   00003AD3 (15059)\n-CDE55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE3CF Local Header Offset   00003AD3 (15059)\n+CE3D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDE55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE3D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDE55: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE3D3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDE2D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE3AB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDE77 CENTRAL HEADER #137   02014B50 (33639248)\n-CDE7B Created Zip Spec      14 (20) '2.0'\n-CDE7C Created OS            03 (3) 'Unix'\n-CDE7D Extract Zip Spec      0A (10) '1.0'\n-CDE7E Extract OS            00 (0) 'MS-DOS'\n-CDE7F General Purpose Flag  0800 (2048)\n+CE3F5 CENTRAL HEADER #137   02014B50 (33639248)\n+CE3F9 Created Zip Spec      14 (20) '2.0'\n+CE3FA Created OS            03 (3) 'Unix'\n+CE3FB Extract Zip Spec      0A (10) '1.0'\n+CE3FC Extract OS            00 (0) 'MS-DOS'\n+CE3FD General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDE81 Compression Method    0000 (0) 'Stored'\n-CDE83 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDE87 CRC                   00000000 (0)\n-CDE8B Compressed Size       00000000 (0)\n-CDE8F Uncompressed Size     00000000 (0)\n-CDE93 Filename Length       002B (43)\n-CDE95 Extra Length          0000 (0)\n-CDE97 Comment Length        0000 (0)\n-CDE99 Disk Start            0000 (0)\n-CDE9B Int File Attributes   0000 (0)\n+CE3FF Compression Method    0000 (0) 'Stored'\n+CE401 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE405 CRC                   00000000 (0)\n+CE409 Compressed Size       00000000 (0)\n+CE40D Uncompressed Size     00000000 (0)\n+CE411 Filename Length       002B (43)\n+CE413 Extra Length          0000 (0)\n+CE415 Comment Length        0000 (0)\n+CE417 Disk Start            0000 (0)\n+CE419 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDE9D Ext File Attributes   41ED0010 (1106051088)\n+CE41B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDEA1 Local Header Offset   00003B13 (15123)\n-CDEA5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE41F Local Header Offset   00003B13 (15123)\n+CE423 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDEA5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE423: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDEA5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE423: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDE7D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE3FB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDED0 CENTRAL HEADER #138   02014B50 (33639248)\n-CDED4 Created Zip Spec      14 (20) '2.0'\n-CDED5 Created OS            03 (3) 'Unix'\n-CDED6 Extract Zip Spec      0A (10) '1.0'\n-CDED7 Extract OS            00 (0) 'MS-DOS'\n-CDED8 General Purpose Flag  0800 (2048)\n+CE44E CENTRAL HEADER #138   02014B50 (33639248)\n+CE452 Created Zip Spec      14 (20) '2.0'\n+CE453 Created OS            03 (3) 'Unix'\n+CE454 Extract Zip Spec      0A (10) '1.0'\n+CE455 Extract OS            00 (0) 'MS-DOS'\n+CE456 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDEDA Compression Method    0000 (0) 'Stored'\n-CDEDC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDEE0 CRC                   00000000 (0)\n-CDEE4 Compressed Size       00000000 (0)\n-CDEE8 Uncompressed Size     00000000 (0)\n-CDEEC Filename Length       004D (77)\n-CDEEE Extra Length          0000 (0)\n-CDEF0 Comment Length        0000 (0)\n-CDEF2 Disk Start            0000 (0)\n-CDEF4 Int File Attributes   0000 (0)\n+CE458 Compression Method    0000 (0) 'Stored'\n+CE45A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE45E CRC                   00000000 (0)\n+CE462 Compressed Size       00000000 (0)\n+CE466 Uncompressed Size     00000000 (0)\n+CE46A Filename Length       004D (77)\n+CE46C Extra Length          0000 (0)\n+CE46E Comment Length        0000 (0)\n+CE470 Disk Start            0000 (0)\n+CE472 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDEF6 Ext File Attributes   41ED0010 (1106051088)\n+CE474 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDEFA Local Header Offset   00003B5C (15196)\n-CDEFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE478 Local Header Offset   00003B5C (15196)\n+CE47C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDEFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE47C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDEFE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE47C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDED6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE454: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDF4B CENTRAL HEADER #139   02014B50 (33639248)\n-CDF4F Created Zip Spec      14 (20) '2.0'\n-CDF50 Created OS            03 (3) 'Unix'\n-CDF51 Extract Zip Spec      0A (10) '1.0'\n-CDF52 Extract OS            00 (0) 'MS-DOS'\n-CDF53 General Purpose Flag  0800 (2048)\n+CE4C9 CENTRAL HEADER #139   02014B50 (33639248)\n+CE4CD Created Zip Spec      14 (20) '2.0'\n+CE4CE Created OS            03 (3) 'Unix'\n+CE4CF Extract Zip Spec      0A (10) '1.0'\n+CE4D0 Extract OS            00 (0) 'MS-DOS'\n+CE4D1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDF55 Compression Method    0000 (0) 'Stored'\n-CDF57 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDF5B CRC                   00000000 (0)\n-CDF5F Compressed Size       00000000 (0)\n-CDF63 Uncompressed Size     00000000 (0)\n-CDF67 Filename Length       0030 (48)\n-CDF69 Extra Length          0000 (0)\n-CDF6B Comment Length        0000 (0)\n-CDF6D Disk Start            0000 (0)\n-CDF6F Int File Attributes   0000 (0)\n+CE4D3 Compression Method    0000 (0) 'Stored'\n+CE4D5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE4D9 CRC                   00000000 (0)\n+CE4DD Compressed Size       00000000 (0)\n+CE4E1 Uncompressed Size     00000000 (0)\n+CE4E5 Filename Length       0030 (48)\n+CE4E7 Extra Length          0000 (0)\n+CE4E9 Comment Length        0000 (0)\n+CE4EB Disk Start            0000 (0)\n+CE4ED Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDF71 Ext File Attributes   41ED0010 (1106051088)\n+CE4EF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDF75 Local Header Offset   00003BC7 (15303)\n-CDF79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE4F3 Local Header Offset   00003BC7 (15303)\n+CE4F7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDF79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE4F7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDF79: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE4F7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDF51: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE4CF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CDFA9 CENTRAL HEADER #140   02014B50 (33639248)\n-CDFAD Created Zip Spec      14 (20) '2.0'\n-CDFAE Created OS            03 (3) 'Unix'\n-CDFAF Extract Zip Spec      0A (10) '1.0'\n-CDFB0 Extract OS            00 (0) 'MS-DOS'\n-CDFB1 General Purpose Flag  0800 (2048)\n+CE527 CENTRAL HEADER #140   02014B50 (33639248)\n+CE52B Created Zip Spec      14 (20) '2.0'\n+CE52C Created OS            03 (3) 'Unix'\n+CE52D Extract Zip Spec      0A (10) '1.0'\n+CE52E Extract OS            00 (0) 'MS-DOS'\n+CE52F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CDFB3 Compression Method    0000 (0) 'Stored'\n-CDFB5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CDFB9 CRC                   00000000 (0)\n-CDFBD Compressed Size       00000000 (0)\n-CDFC1 Uncompressed Size     00000000 (0)\n-CDFC5 Filename Length       0039 (57)\n-CDFC7 Extra Length          0000 (0)\n-CDFC9 Comment Length        0000 (0)\n-CDFCB Disk Start            0000 (0)\n-CDFCD Int File Attributes   0000 (0)\n+CE531 Compression Method    0000 (0) 'Stored'\n+CE533 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE537 CRC                   00000000 (0)\n+CE53B Compressed Size       00000000 (0)\n+CE53F Uncompressed Size     00000000 (0)\n+CE543 Filename Length       0039 (57)\n+CE545 Extra Length          0000 (0)\n+CE547 Comment Length        0000 (0)\n+CE549 Disk Start            0000 (0)\n+CE54B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CDFCF Ext File Attributes   41ED0010 (1106051088)\n+CE54D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CDFD3 Local Header Offset   00003C15 (15381)\n-CDFD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE551 Local Header Offset   00003C15 (15381)\n+CE555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCDFD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCDFD7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE555: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCDFAF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE52D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE010 CENTRAL HEADER #141   02014B50 (33639248)\n-CE014 Created Zip Spec      14 (20) '2.0'\n-CE015 Created OS            03 (3) 'Unix'\n-CE016 Extract Zip Spec      0A (10) '1.0'\n-CE017 Extract OS            00 (0) 'MS-DOS'\n-CE018 General Purpose Flag  0800 (2048)\n+CE58E CENTRAL HEADER #141   02014B50 (33639248)\n+CE592 Created Zip Spec      14 (20) '2.0'\n+CE593 Created OS            03 (3) 'Unix'\n+CE594 Extract Zip Spec      0A (10) '1.0'\n+CE595 Extract OS            00 (0) 'MS-DOS'\n+CE596 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE01A Compression Method    0000 (0) 'Stored'\n-CE01C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE020 CRC                   00000000 (0)\n-CE024 Compressed Size       00000000 (0)\n-CE028 Uncompressed Size     00000000 (0)\n-CE02C Filename Length       006A (106)\n-CE02E Extra Length          0000 (0)\n-CE030 Comment Length        0000 (0)\n-CE032 Disk Start            0000 (0)\n-CE034 Int File Attributes   0000 (0)\n+CE598 Compression Method    0000 (0) 'Stored'\n+CE59A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE59E CRC                   00000000 (0)\n+CE5A2 Compressed Size       00000000 (0)\n+CE5A6 Uncompressed Size     00000000 (0)\n+CE5AA Filename Length       006A (106)\n+CE5AC Extra Length          0000 (0)\n+CE5AE Comment Length        0000 (0)\n+CE5B0 Disk Start            0000 (0)\n+CE5B2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE036 Ext File Attributes   41ED0010 (1106051088)\n+CE5B4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE03A Local Header Offset   00003C6C (15468)\n-CE03E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE5B8 Local Header Offset   00003C6C (15468)\n+CE5BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE03E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE5BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE03E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE5BC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE016: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE594: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE0A8 CENTRAL HEADER #142   02014B50 (33639248)\n-CE0AC Created Zip Spec      14 (20) '2.0'\n-CE0AD Created OS            03 (3) 'Unix'\n-CE0AE Extract Zip Spec      0A (10) '1.0'\n-CE0AF Extract OS            00 (0) 'MS-DOS'\n-CE0B0 General Purpose Flag  0800 (2048)\n+CE626 CENTRAL HEADER #142   02014B50 (33639248)\n+CE62A Created Zip Spec      14 (20) '2.0'\n+CE62B Created OS            03 (3) 'Unix'\n+CE62C Extract Zip Spec      0A (10) '1.0'\n+CE62D Extract OS            00 (0) 'MS-DOS'\n+CE62E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE0B2 Compression Method    0000 (0) 'Stored'\n-CE0B4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE0B8 CRC                   00000000 (0)\n-CE0BC Compressed Size       00000000 (0)\n-CE0C0 Uncompressed Size     00000000 (0)\n-CE0C4 Filename Length       003C (60)\n-CE0C6 Extra Length          0000 (0)\n-CE0C8 Comment Length        0000 (0)\n-CE0CA Disk Start            0000 (0)\n-CE0CC Int File Attributes   0000 (0)\n+CE630 Compression Method    0000 (0) 'Stored'\n+CE632 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE636 CRC                   00000000 (0)\n+CE63A Compressed Size       00000000 (0)\n+CE63E Uncompressed Size     00000000 (0)\n+CE642 Filename Length       003C (60)\n+CE644 Extra Length          0000 (0)\n+CE646 Comment Length        0000 (0)\n+CE648 Disk Start            0000 (0)\n+CE64A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE0CE Ext File Attributes   41ED0010 (1106051088)\n+CE64C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE0D2 Local Header Offset   00003CF4 (15604)\n-CE0D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE650 Local Header Offset   00003CF4 (15604)\n+CE654 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE0D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE654: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE0D6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE654: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE0AE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE62C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE112 CENTRAL HEADER #143   02014B50 (33639248)\n-CE116 Created Zip Spec      14 (20) '2.0'\n-CE117 Created OS            03 (3) 'Unix'\n-CE118 Extract Zip Spec      0A (10) '1.0'\n-CE119 Extract OS            00 (0) 'MS-DOS'\n-CE11A General Purpose Flag  0800 (2048)\n+CE690 CENTRAL HEADER #143   02014B50 (33639248)\n+CE694 Created Zip Spec      14 (20) '2.0'\n+CE695 Created OS            03 (3) 'Unix'\n+CE696 Extract Zip Spec      0A (10) '1.0'\n+CE697 Extract OS            00 (0) 'MS-DOS'\n+CE698 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE11C Compression Method    0000 (0) 'Stored'\n-CE11E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE122 CRC                   00000000 (0)\n-CE126 Compressed Size       00000000 (0)\n-CE12A Uncompressed Size     00000000 (0)\n-CE12E Filename Length       0045 (69)\n-CE130 Extra Length          0000 (0)\n-CE132 Comment Length        0000 (0)\n-CE134 Disk Start            0000 (0)\n-CE136 Int File Attributes   0000 (0)\n+CE69A Compression Method    0000 (0) 'Stored'\n+CE69C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE6A0 CRC                   00000000 (0)\n+CE6A4 Compressed Size       00000000 (0)\n+CE6A8 Uncompressed Size     00000000 (0)\n+CE6AC Filename Length       0045 (69)\n+CE6AE Extra Length          0000 (0)\n+CE6B0 Comment Length        0000 (0)\n+CE6B2 Disk Start            0000 (0)\n+CE6B4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE138 Ext File Attributes   41ED0010 (1106051088)\n+CE6B6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE13C Local Header Offset   00003D4E (15694)\n-CE140 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE6BA Local Header Offset   00003D4E (15694)\n+CE6BE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE140: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE6BE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE140: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE6BE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE118: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE696: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE185 CENTRAL HEADER #144   02014B50 (33639248)\n-CE189 Created Zip Spec      14 (20) '2.0'\n-CE18A Created OS            03 (3) 'Unix'\n-CE18B Extract Zip Spec      0A (10) '1.0'\n-CE18C Extract OS            00 (0) 'MS-DOS'\n-CE18D General Purpose Flag  0800 (2048)\n+CE703 CENTRAL HEADER #144   02014B50 (33639248)\n+CE707 Created Zip Spec      14 (20) '2.0'\n+CE708 Created OS            03 (3) 'Unix'\n+CE709 Extract Zip Spec      0A (10) '1.0'\n+CE70A Extract OS            00 (0) 'MS-DOS'\n+CE70B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE18F Compression Method    0000 (0) 'Stored'\n-CE191 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE195 CRC                   00000000 (0)\n-CE199 Compressed Size       00000000 (0)\n-CE19D Uncompressed Size     00000000 (0)\n-CE1A1 Filename Length       0063 (99)\n-CE1A3 Extra Length          0000 (0)\n-CE1A5 Comment Length        0000 (0)\n-CE1A7 Disk Start            0000 (0)\n-CE1A9 Int File Attributes   0000 (0)\n+CE70D Compression Method    0000 (0) 'Stored'\n+CE70F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE713 CRC                   00000000 (0)\n+CE717 Compressed Size       00000000 (0)\n+CE71B Uncompressed Size     00000000 (0)\n+CE71F Filename Length       0063 (99)\n+CE721 Extra Length          0000 (0)\n+CE723 Comment Length        0000 (0)\n+CE725 Disk Start            0000 (0)\n+CE727 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE1AB Ext File Attributes   41ED0010 (1106051088)\n+CE729 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE1AF Local Header Offset   00003DB1 (15793)\n-CE1B3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE72D Local Header Offset   00003DB1 (15793)\n+CE731 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE1B3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE731: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE1B3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE731: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE18B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE709: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE216 CENTRAL HEADER #145   02014B50 (33639248)\n-CE21A Created Zip Spec      14 (20) '2.0'\n-CE21B Created OS            03 (3) 'Unix'\n-CE21C Extract Zip Spec      0A (10) '1.0'\n-CE21D Extract OS            00 (0) 'MS-DOS'\n-CE21E General Purpose Flag  0800 (2048)\n+CE794 CENTRAL HEADER #145   02014B50 (33639248)\n+CE798 Created Zip Spec      14 (20) '2.0'\n+CE799 Created OS            03 (3) 'Unix'\n+CE79A Extract Zip Spec      0A (10) '1.0'\n+CE79B Extract OS            00 (0) 'MS-DOS'\n+CE79C General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE220 Compression Method    0000 (0) 'Stored'\n-CE222 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE226 CRC                   00000000 (0)\n-CE22A Compressed Size       00000000 (0)\n-CE22E Uncompressed Size     00000000 (0)\n-CE232 Filename Length       0063 (99)\n-CE234 Extra Length          0000 (0)\n-CE236 Comment Length        0000 (0)\n-CE238 Disk Start            0000 (0)\n-CE23A Int File Attributes   0000 (0)\n+CE79E Compression Method    0000 (0) 'Stored'\n+CE7A0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE7A4 CRC                   00000000 (0)\n+CE7A8 Compressed Size       00000000 (0)\n+CE7AC Uncompressed Size     00000000 (0)\n+CE7B0 Filename Length       0063 (99)\n+CE7B2 Extra Length          0000 (0)\n+CE7B4 Comment Length        0000 (0)\n+CE7B6 Disk Start            0000 (0)\n+CE7B8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE23C Ext File Attributes   41ED0010 (1106051088)\n+CE7BA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE240 Local Header Offset   00003E32 (15922)\n-CE244 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE7BE Local Header Offset   00003E32 (15922)\n+CE7C2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE244: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE7C2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE244: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE7C2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE21C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE79A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE2A7 CENTRAL HEADER #146   02014B50 (33639248)\n-CE2AB Created Zip Spec      14 (20) '2.0'\n-CE2AC Created OS            03 (3) 'Unix'\n-CE2AD Extract Zip Spec      0A (10) '1.0'\n-CE2AE Extract OS            00 (0) 'MS-DOS'\n-CE2AF General Purpose Flag  0800 (2048)\n+CE825 CENTRAL HEADER #146   02014B50 (33639248)\n+CE829 Created Zip Spec      14 (20) '2.0'\n+CE82A Created OS            03 (3) 'Unix'\n+CE82B Extract Zip Spec      0A (10) '1.0'\n+CE82C Extract OS            00 (0) 'MS-DOS'\n+CE82D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE2B1 Compression Method    0000 (0) 'Stored'\n-CE2B3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE2B7 CRC                   00000000 (0)\n-CE2BB Compressed Size       00000000 (0)\n-CE2BF Uncompressed Size     00000000 (0)\n-CE2C3 Filename Length       0065 (101)\n-CE2C5 Extra Length          0000 (0)\n-CE2C7 Comment Length        0000 (0)\n-CE2C9 Disk Start            0000 (0)\n-CE2CB Int File Attributes   0000 (0)\n+CE82F Compression Method    0000 (0) 'Stored'\n+CE831 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE835 CRC                   00000000 (0)\n+CE839 Compressed Size       00000000 (0)\n+CE83D Uncompressed Size     00000000 (0)\n+CE841 Filename Length       0065 (101)\n+CE843 Extra Length          0000 (0)\n+CE845 Comment Length        0000 (0)\n+CE847 Disk Start            0000 (0)\n+CE849 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE2CD Ext File Attributes   41ED0010 (1106051088)\n+CE84B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE2D1 Local Header Offset   00003EB3 (16051)\n-CE2D5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE84F Local Header Offset   00003EB3 (16051)\n+CE853 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE2D5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE853: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE2D5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE853: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE2AD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE82B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE33A CENTRAL HEADER #147   02014B50 (33639248)\n-CE33E Created Zip Spec      14 (20) '2.0'\n-CE33F Created OS            03 (3) 'Unix'\n-CE340 Extract Zip Spec      0A (10) '1.0'\n-CE341 Extract OS            00 (0) 'MS-DOS'\n-CE342 General Purpose Flag  0800 (2048)\n+CE8B8 CENTRAL HEADER #147   02014B50 (33639248)\n+CE8BC Created Zip Spec      14 (20) '2.0'\n+CE8BD Created OS            03 (3) 'Unix'\n+CE8BE Extract Zip Spec      0A (10) '1.0'\n+CE8BF Extract OS            00 (0) 'MS-DOS'\n+CE8C0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE344 Compression Method    0000 (0) 'Stored'\n-CE346 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE34A CRC                   00000000 (0)\n-CE34E Compressed Size       00000000 (0)\n-CE352 Uncompressed Size     00000000 (0)\n-CE356 Filename Length       0069 (105)\n-CE358 Extra Length          0000 (0)\n-CE35A Comment Length        0000 (0)\n-CE35C Disk Start            0000 (0)\n-CE35E Int File Attributes   0000 (0)\n+CE8C2 Compression Method    0000 (0) 'Stored'\n+CE8C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE8C8 CRC                   00000000 (0)\n+CE8CC Compressed Size       00000000 (0)\n+CE8D0 Uncompressed Size     00000000 (0)\n+CE8D4 Filename Length       0069 (105)\n+CE8D6 Extra Length          0000 (0)\n+CE8D8 Comment Length        0000 (0)\n+CE8DA Disk Start            0000 (0)\n+CE8DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE360 Ext File Attributes   41ED0010 (1106051088)\n+CE8DE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE364 Local Header Offset   00003F36 (16182)\n-CE368 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE8E2 Local Header Offset   00003F36 (16182)\n+CE8E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE368: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE8E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE368: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE8E6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE340: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE8BE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE3D1 CENTRAL HEADER #148   02014B50 (33639248)\n-CE3D5 Created Zip Spec      14 (20) '2.0'\n-CE3D6 Created OS            03 (3) 'Unix'\n-CE3D7 Extract Zip Spec      0A (10) '1.0'\n-CE3D8 Extract OS            00 (0) 'MS-DOS'\n-CE3D9 General Purpose Flag  0800 (2048)\n+CE94F CENTRAL HEADER #148   02014B50 (33639248)\n+CE953 Created Zip Spec      14 (20) '2.0'\n+CE954 Created OS            03 (3) 'Unix'\n+CE955 Extract Zip Spec      0A (10) '1.0'\n+CE956 Extract OS            00 (0) 'MS-DOS'\n+CE957 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE3DB Compression Method    0000 (0) 'Stored'\n-CE3DD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE3E1 CRC                   00000000 (0)\n-CE3E5 Compressed Size       00000000 (0)\n-CE3E9 Uncompressed Size     00000000 (0)\n-CE3ED Filename Length       0069 (105)\n-CE3EF Extra Length          0000 (0)\n-CE3F1 Comment Length        0000 (0)\n-CE3F3 Disk Start            0000 (0)\n-CE3F5 Int File Attributes   0000 (0)\n+CE959 Compression Method    0000 (0) 'Stored'\n+CE95B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE95F CRC                   00000000 (0)\n+CE963 Compressed Size       00000000 (0)\n+CE967 Uncompressed Size     00000000 (0)\n+CE96B Filename Length       0069 (105)\n+CE96D Extra Length          0000 (0)\n+CE96F Comment Length        0000 (0)\n+CE971 Disk Start            0000 (0)\n+CE973 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE3F7 Ext File Attributes   41ED0010 (1106051088)\n+CE975 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE3FB Local Header Offset   00003FBD (16317)\n-CE3FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CE979 Local Header Offset   00003FBD (16317)\n+CE97D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE3FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE97D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE3FF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCE97D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE3D7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE955: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE468 CENTRAL HEADER #149   02014B50 (33639248)\n-CE46C Created Zip Spec      14 (20) '2.0'\n-CE46D Created OS            03 (3) 'Unix'\n-CE46E Extract Zip Spec      0A (10) '1.0'\n-CE46F Extract OS            00 (0) 'MS-DOS'\n-CE470 General Purpose Flag  0800 (2048)\n+CE9E6 CENTRAL HEADER #149   02014B50 (33639248)\n+CE9EA Created Zip Spec      14 (20) '2.0'\n+CE9EB Created OS            03 (3) 'Unix'\n+CE9EC Extract Zip Spec      0A (10) '1.0'\n+CE9ED Extract OS            00 (0) 'MS-DOS'\n+CE9EE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE472 Compression Method    0000 (0) 'Stored'\n-CE474 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE478 CRC                   00000000 (0)\n-CE47C Compressed Size       00000000 (0)\n-CE480 Uncompressed Size     00000000 (0)\n-CE484 Filename Length       006D (109)\n-CE486 Extra Length          0000 (0)\n-CE488 Comment Length        0000 (0)\n-CE48A Disk Start            0000 (0)\n-CE48C Int File Attributes   0000 (0)\n+CE9F0 Compression Method    0000 (0) 'Stored'\n+CE9F2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CE9F6 CRC                   00000000 (0)\n+CE9FA Compressed Size       00000000 (0)\n+CE9FE Uncompressed Size     00000000 (0)\n+CEA02 Filename Length       006D (109)\n+CEA04 Extra Length          0000 (0)\n+CEA06 Comment Length        0000 (0)\n+CEA08 Disk Start            0000 (0)\n+CEA0A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE48E Ext File Attributes   41ED0010 (1106051088)\n+CEA0C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE492 Local Header Offset   00004044 (16452)\n-CE496 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEA10 Local Header Offset   00004044 (16452)\n+CEA14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE496: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEA14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE496: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEA14: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE46E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCE9EC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE503 CENTRAL HEADER #150   02014B50 (33639248)\n-CE507 Created Zip Spec      14 (20) '2.0'\n-CE508 Created OS            03 (3) 'Unix'\n-CE509 Extract Zip Spec      0A (10) '1.0'\n-CE50A Extract OS            00 (0) 'MS-DOS'\n-CE50B General Purpose Flag  0800 (2048)\n+CEA81 CENTRAL HEADER #150   02014B50 (33639248)\n+CEA85 Created Zip Spec      14 (20) '2.0'\n+CEA86 Created OS            03 (3) 'Unix'\n+CEA87 Extract Zip Spec      0A (10) '1.0'\n+CEA88 Extract OS            00 (0) 'MS-DOS'\n+CEA89 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE50D Compression Method    0000 (0) 'Stored'\n-CE50F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE513 CRC                   00000000 (0)\n-CE517 Compressed Size       00000000 (0)\n-CE51B Uncompressed Size     00000000 (0)\n-CE51F Filename Length       0069 (105)\n-CE521 Extra Length          0000 (0)\n-CE523 Comment Length        0000 (0)\n-CE525 Disk Start            0000 (0)\n-CE527 Int File Attributes   0000 (0)\n+CEA8B Compression Method    0000 (0) 'Stored'\n+CEA8D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEA91 CRC                   00000000 (0)\n+CEA95 Compressed Size       00000000 (0)\n+CEA99 Uncompressed Size     00000000 (0)\n+CEA9D Filename Length       0069 (105)\n+CEA9F Extra Length          0000 (0)\n+CEAA1 Comment Length        0000 (0)\n+CEAA3 Disk Start            0000 (0)\n+CEAA5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE529 Ext File Attributes   41ED0010 (1106051088)\n+CEAA7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE52D Local Header Offset   000040CF (16591)\n-CE531 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEAAB Local Header Offset   000040CF (16591)\n+CEAAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE531: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEAAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE531: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEAAF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE509: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEA87: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE59A CENTRAL HEADER #151   02014B50 (33639248)\n-CE59E Created Zip Spec      14 (20) '2.0'\n-CE59F Created OS            03 (3) 'Unix'\n-CE5A0 Extract Zip Spec      0A (10) '1.0'\n-CE5A1 Extract OS            00 (0) 'MS-DOS'\n-CE5A2 General Purpose Flag  0800 (2048)\n+CEB18 CENTRAL HEADER #151   02014B50 (33639248)\n+CEB1C Created Zip Spec      14 (20) '2.0'\n+CEB1D Created OS            03 (3) 'Unix'\n+CEB1E Extract Zip Spec      0A (10) '1.0'\n+CEB1F Extract OS            00 (0) 'MS-DOS'\n+CEB20 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE5A4 Compression Method    0000 (0) 'Stored'\n-CE5A6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE5AA CRC                   00000000 (0)\n-CE5AE Compressed Size       00000000 (0)\n-CE5B2 Uncompressed Size     00000000 (0)\n-CE5B6 Filename Length       0078 (120)\n-CE5B8 Extra Length          0000 (0)\n-CE5BA Comment Length        0000 (0)\n-CE5BC Disk Start            0000 (0)\n-CE5BE Int File Attributes   0000 (0)\n+CEB22 Compression Method    0000 (0) 'Stored'\n+CEB24 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEB28 CRC                   00000000 (0)\n+CEB2C Compressed Size       00000000 (0)\n+CEB30 Uncompressed Size     00000000 (0)\n+CEB34 Filename Length       0078 (120)\n+CEB36 Extra Length          0000 (0)\n+CEB38 Comment Length        0000 (0)\n+CEB3A Disk Start            0000 (0)\n+CEB3C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE5C0 Ext File Attributes   41ED0010 (1106051088)\n+CEB3E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE5C4 Local Header Offset   00004156 (16726)\n-CE5C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEB42 Local Header Offset   00004156 (16726)\n+CEB46 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE5C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEB46: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE5C8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEB46: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE5A0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEB1E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE640 CENTRAL HEADER #152   02014B50 (33639248)\n-CE644 Created Zip Spec      14 (20) '2.0'\n-CE645 Created OS            03 (3) 'Unix'\n-CE646 Extract Zip Spec      0A (10) '1.0'\n-CE647 Extract OS            00 (0) 'MS-DOS'\n-CE648 General Purpose Flag  0800 (2048)\n+CEBBE CENTRAL HEADER #152   02014B50 (33639248)\n+CEBC2 Created Zip Spec      14 (20) '2.0'\n+CEBC3 Created OS            03 (3) 'Unix'\n+CEBC4 Extract Zip Spec      0A (10) '1.0'\n+CEBC5 Extract OS            00 (0) 'MS-DOS'\n+CEBC6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE64A Compression Method    0000 (0) 'Stored'\n-CE64C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE650 CRC                   00000000 (0)\n-CE654 Compressed Size       00000000 (0)\n-CE658 Uncompressed Size     00000000 (0)\n-CE65C Filename Length       0063 (99)\n-CE65E Extra Length          0000 (0)\n-CE660 Comment Length        0000 (0)\n-CE662 Disk Start            0000 (0)\n-CE664 Int File Attributes   0000 (0)\n+CEBC8 Compression Method    0000 (0) 'Stored'\n+CEBCA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEBCE CRC                   00000000 (0)\n+CEBD2 Compressed Size       00000000 (0)\n+CEBD6 Uncompressed Size     00000000 (0)\n+CEBDA Filename Length       0063 (99)\n+CEBDC Extra Length          0000 (0)\n+CEBDE Comment Length        0000 (0)\n+CEBE0 Disk Start            0000 (0)\n+CEBE2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE666 Ext File Attributes   41ED0010 (1106051088)\n+CEBE4 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE66A Local Header Offset   000041EC (16876)\n-CE66E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEBE8 Local Header Offset   000041EC (16876)\n+CEBEC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE66E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEBEC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE66E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEBEC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE646: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEBC4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE6D1 CENTRAL HEADER #153   02014B50 (33639248)\n-CE6D5 Created Zip Spec      14 (20) '2.0'\n-CE6D6 Created OS            03 (3) 'Unix'\n-CE6D7 Extract Zip Spec      0A (10) '1.0'\n-CE6D8 Extract OS            00 (0) 'MS-DOS'\n-CE6D9 General Purpose Flag  0800 (2048)\n+CEC4F CENTRAL HEADER #153   02014B50 (33639248)\n+CEC53 Created Zip Spec      14 (20) '2.0'\n+CEC54 Created OS            03 (3) 'Unix'\n+CEC55 Extract Zip Spec      0A (10) '1.0'\n+CEC56 Extract OS            00 (0) 'MS-DOS'\n+CEC57 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE6DB Compression Method    0000 (0) 'Stored'\n-CE6DD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE6E1 CRC                   00000000 (0)\n-CE6E5 Compressed Size       00000000 (0)\n-CE6E9 Uncompressed Size     00000000 (0)\n-CE6ED Filename Length       006C (108)\n-CE6EF Extra Length          0000 (0)\n-CE6F1 Comment Length        0000 (0)\n-CE6F3 Disk Start            0000 (0)\n-CE6F5 Int File Attributes   0000 (0)\n+CEC59 Compression Method    0000 (0) 'Stored'\n+CEC5B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEC5F CRC                   00000000 (0)\n+CEC63 Compressed Size       00000000 (0)\n+CEC67 Uncompressed Size     00000000 (0)\n+CEC6B Filename Length       006C (108)\n+CEC6D Extra Length          0000 (0)\n+CEC6F Comment Length        0000 (0)\n+CEC71 Disk Start            0000 (0)\n+CEC73 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE6F7 Ext File Attributes   41ED0010 (1106051088)\n+CEC75 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE6FB Local Header Offset   0000426D (17005)\n-CE6FF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEC79 Local Header Offset   0000426D (17005)\n+CEC7D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE6FF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEC7D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE6FF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEC7D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE6D7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEC55: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE76B CENTRAL HEADER #154   02014B50 (33639248)\n-CE76F Created Zip Spec      14 (20) '2.0'\n-CE770 Created OS            03 (3) 'Unix'\n-CE771 Extract Zip Spec      0A (10) '1.0'\n-CE772 Extract OS            00 (0) 'MS-DOS'\n-CE773 General Purpose Flag  0800 (2048)\n+CECE9 CENTRAL HEADER #154   02014B50 (33639248)\n+CECED Created Zip Spec      14 (20) '2.0'\n+CECEE Created OS            03 (3) 'Unix'\n+CECEF Extract Zip Spec      0A (10) '1.0'\n+CECF0 Extract OS            00 (0) 'MS-DOS'\n+CECF1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE775 Compression Method    0000 (0) 'Stored'\n-CE777 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE77B CRC                   00000000 (0)\n-CE77F Compressed Size       00000000 (0)\n-CE783 Uncompressed Size     00000000 (0)\n-CE787 Filename Length       0069 (105)\n-CE789 Extra Length          0000 (0)\n-CE78B Comment Length        0000 (0)\n-CE78D Disk Start            0000 (0)\n-CE78F Int File Attributes   0000 (0)\n+CECF3 Compression Method    0000 (0) 'Stored'\n+CECF5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CECF9 CRC                   00000000 (0)\n+CECFD Compressed Size       00000000 (0)\n+CED01 Uncompressed Size     00000000 (0)\n+CED05 Filename Length       0069 (105)\n+CED07 Extra Length          0000 (0)\n+CED09 Comment Length        0000 (0)\n+CED0B Disk Start            0000 (0)\n+CED0D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE791 Ext File Attributes   41ED0010 (1106051088)\n+CED0F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE795 Local Header Offset   000042F7 (17143)\n-CE799 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CED13 Local Header Offset   000042F7 (17143)\n+CED17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE799: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCED17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE799: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCED17: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE771: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCECEF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE802 CENTRAL HEADER #155   02014B50 (33639248)\n-CE806 Created Zip Spec      14 (20) '2.0'\n-CE807 Created OS            03 (3) 'Unix'\n-CE808 Extract Zip Spec      0A (10) '1.0'\n-CE809 Extract OS            00 (0) 'MS-DOS'\n-CE80A General Purpose Flag  0800 (2048)\n+CED80 CENTRAL HEADER #155   02014B50 (33639248)\n+CED84 Created Zip Spec      14 (20) '2.0'\n+CED85 Created OS            03 (3) 'Unix'\n+CED86 Extract Zip Spec      0A (10) '1.0'\n+CED87 Extract OS            00 (0) 'MS-DOS'\n+CED88 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE80C Compression Method    0000 (0) 'Stored'\n-CE80E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE812 CRC                   00000000 (0)\n-CE816 Compressed Size       00000000 (0)\n-CE81A Uncompressed Size     00000000 (0)\n-CE81E Filename Length       0029 (41)\n-CE820 Extra Length          0000 (0)\n-CE822 Comment Length        0000 (0)\n-CE824 Disk Start            0000 (0)\n-CE826 Int File Attributes   0000 (0)\n+CED8A Compression Method    0000 (0) 'Stored'\n+CED8C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CED90 CRC                   00000000 (0)\n+CED94 Compressed Size       00000000 (0)\n+CED98 Uncompressed Size     00000000 (0)\n+CED9C Filename Length       0029 (41)\n+CED9E Extra Length          0000 (0)\n+CEDA0 Comment Length        0000 (0)\n+CEDA2 Disk Start            0000 (0)\n+CEDA4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE828 Ext File Attributes   41ED0010 (1106051088)\n+CEDA6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE82C Local Header Offset   0000437E (17278)\n-CE830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEDAA Local Header Offset   0000437E (17278)\n+CEDAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEDAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE830: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEDAE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE808: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCED86: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE859 CENTRAL HEADER #156   02014B50 (33639248)\n-CE85D Created Zip Spec      14 (20) '2.0'\n-CE85E Created OS            03 (3) 'Unix'\n-CE85F Extract Zip Spec      0A (10) '1.0'\n-CE860 Extract OS            00 (0) 'MS-DOS'\n-CE861 General Purpose Flag  0800 (2048)\n+CEDD7 CENTRAL HEADER #156   02014B50 (33639248)\n+CEDDB Created Zip Spec      14 (20) '2.0'\n+CEDDC Created OS            03 (3) 'Unix'\n+CEDDD Extract Zip Spec      0A (10) '1.0'\n+CEDDE Extract OS            00 (0) 'MS-DOS'\n+CEDDF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE863 Compression Method    0000 (0) 'Stored'\n-CE865 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE869 CRC                   00000000 (0)\n-CE86D Compressed Size       00000000 (0)\n-CE871 Uncompressed Size     00000000 (0)\n-CE875 Filename Length       0032 (50)\n-CE877 Extra Length          0000 (0)\n-CE879 Comment Length        0000 (0)\n-CE87B Disk Start            0000 (0)\n-CE87D Int File Attributes   0000 (0)\n+CEDE1 Compression Method    0000 (0) 'Stored'\n+CEDE3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEDE7 CRC                   00000000 (0)\n+CEDEB Compressed Size       00000000 (0)\n+CEDEF Uncompressed Size     00000000 (0)\n+CEDF3 Filename Length       0032 (50)\n+CEDF5 Extra Length          0000 (0)\n+CEDF7 Comment Length        0000 (0)\n+CEDF9 Disk Start            0000 (0)\n+CEDFB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE87F Ext File Attributes   41ED0010 (1106051088)\n+CEDFD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE883 Local Header Offset   000043C5 (17349)\n-CE887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEE01 Local Header Offset   000043C5 (17349)\n+CEE05 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEE05: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE887: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEE05: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE85F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEDDD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE8B9 CENTRAL HEADER #157   02014B50 (33639248)\n-CE8BD Created Zip Spec      14 (20) '2.0'\n-CE8BE Created OS            03 (3) 'Unix'\n-CE8BF Extract Zip Spec      0A (10) '1.0'\n-CE8C0 Extract OS            00 (0) 'MS-DOS'\n-CE8C1 General Purpose Flag  0800 (2048)\n+CEE37 CENTRAL HEADER #157   02014B50 (33639248)\n+CEE3B Created Zip Spec      14 (20) '2.0'\n+CEE3C Created OS            03 (3) 'Unix'\n+CEE3D Extract Zip Spec      0A (10) '1.0'\n+CEE3E Extract OS            00 (0) 'MS-DOS'\n+CEE3F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE8C3 Compression Method    0000 (0) 'Stored'\n-CE8C5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE8C9 CRC                   00000000 (0)\n-CE8CD Compressed Size       00000000 (0)\n-CE8D1 Uncompressed Size     00000000 (0)\n-CE8D5 Filename Length       006C (108)\n-CE8D7 Extra Length          0000 (0)\n-CE8D9 Comment Length        0000 (0)\n-CE8DB Disk Start            0000 (0)\n-CE8DD Int File Attributes   0000 (0)\n+CEE41 Compression Method    0000 (0) 'Stored'\n+CEE43 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEE47 CRC                   00000000 (0)\n+CEE4B Compressed Size       00000000 (0)\n+CEE4F Uncompressed Size     00000000 (0)\n+CEE53 Filename Length       006C (108)\n+CEE55 Extra Length          0000 (0)\n+CEE57 Comment Length        0000 (0)\n+CEE59 Disk Start            0000 (0)\n+CEE5B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE8DF Ext File Attributes   41ED0010 (1106051088)\n+CEE5D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE8E3 Local Header Offset   00004415 (17429)\n-CE8E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEE61 Local Header Offset   00004415 (17429)\n+CEE65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE8E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEE65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE8E7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEE65: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE8BF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEE3D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE953 CENTRAL HEADER #158   02014B50 (33639248)\n-CE957 Created Zip Spec      14 (20) '2.0'\n-CE958 Created OS            03 (3) 'Unix'\n-CE959 Extract Zip Spec      0A (10) '1.0'\n-CE95A Extract OS            00 (0) 'MS-DOS'\n-CE95B General Purpose Flag  0800 (2048)\n+CEED1 CENTRAL HEADER #158   02014B50 (33639248)\n+CEED5 Created Zip Spec      14 (20) '2.0'\n+CEED6 Created OS            03 (3) 'Unix'\n+CEED7 Extract Zip Spec      0A (10) '1.0'\n+CEED8 Extract OS            00 (0) 'MS-DOS'\n+CEED9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE95D Compression Method    0000 (0) 'Stored'\n-CE95F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE963 CRC                   00000000 (0)\n-CE967 Compressed Size       00000000 (0)\n-CE96B Uncompressed Size     00000000 (0)\n-CE96F Filename Length       006E (110)\n-CE971 Extra Length          0000 (0)\n-CE973 Comment Length        0000 (0)\n-CE975 Disk Start            0000 (0)\n-CE977 Int File Attributes   0000 (0)\n+CEEDB Compression Method    0000 (0) 'Stored'\n+CEEDD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEEE1 CRC                   00000000 (0)\n+CEEE5 Compressed Size       00000000 (0)\n+CEEE9 Uncompressed Size     00000000 (0)\n+CEEED Filename Length       006E (110)\n+CEEEF Extra Length          0000 (0)\n+CEEF1 Comment Length        0000 (0)\n+CEEF3 Disk Start            0000 (0)\n+CEEF5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CE979 Ext File Attributes   41ED0010 (1106051088)\n+CEEF7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CE97D Local Header Offset   0000449F (17567)\n-CE981 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEEFB Local Header Offset   0000449F (17567)\n+CEEFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCE981: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEEFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCE981: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEEFF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE959: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEED7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CE9EF CENTRAL HEADER #159   02014B50 (33639248)\n-CE9F3 Created Zip Spec      14 (20) '2.0'\n-CE9F4 Created OS            03 (3) 'Unix'\n-CE9F5 Extract Zip Spec      0A (10) '1.0'\n-CE9F6 Extract OS            00 (0) 'MS-DOS'\n-CE9F7 General Purpose Flag  0800 (2048)\n+CEF6D CENTRAL HEADER #159   02014B50 (33639248)\n+CEF71 Created Zip Spec      14 (20) '2.0'\n+CEF72 Created OS            03 (3) 'Unix'\n+CEF73 Extract Zip Spec      0A (10) '1.0'\n+CEF74 Extract OS            00 (0) 'MS-DOS'\n+CEF75 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CE9F9 Compression Method    0000 (0) 'Stored'\n-CE9FB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CE9FF CRC                   00000000 (0)\n-CEA03 Compressed Size       00000000 (0)\n-CEA07 Uncompressed Size     00000000 (0)\n-CEA0B Filename Length       0028 (40)\n-CEA0D Extra Length          0000 (0)\n-CEA0F Comment Length        0000 (0)\n-CEA11 Disk Start            0000 (0)\n-CEA13 Int File Attributes   0000 (0)\n+CEF77 Compression Method    0000 (0) 'Stored'\n+CEF79 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEF7D CRC                   00000000 (0)\n+CEF81 Compressed Size       00000000 (0)\n+CEF85 Uncompressed Size     00000000 (0)\n+CEF89 Filename Length       0028 (40)\n+CEF8B Extra Length          0000 (0)\n+CEF8D Comment Length        0000 (0)\n+CEF8F Disk Start            0000 (0)\n+CEF91 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEA15 Ext File Attributes   41ED0010 (1106051088)\n+CEF93 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEA19 Local Header Offset   0000452B (17707)\n-CEA1D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEF97 Local Header Offset   0000452B (17707)\n+CEF9B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEA1D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEF9B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEA1D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEF9B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCE9F5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEF73: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEA45 CENTRAL HEADER #160   02014B50 (33639248)\n-CEA49 Created Zip Spec      14 (20) '2.0'\n-CEA4A Created OS            03 (3) 'Unix'\n-CEA4B Extract Zip Spec      0A (10) '1.0'\n-CEA4C Extract OS            00 (0) 'MS-DOS'\n-CEA4D General Purpose Flag  0800 (2048)\n+CEFC3 CENTRAL HEADER #160   02014B50 (33639248)\n+CEFC7 Created Zip Spec      14 (20) '2.0'\n+CEFC8 Created OS            03 (3) 'Unix'\n+CEFC9 Extract Zip Spec      0A (10) '1.0'\n+CEFCA Extract OS            00 (0) 'MS-DOS'\n+CEFCB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEA4F Compression Method    0000 (0) 'Stored'\n-CEA51 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEA55 CRC                   00000000 (0)\n-CEA59 Compressed Size       00000000 (0)\n-CEA5D Uncompressed Size     00000000 (0)\n-CEA61 Filename Length       0031 (49)\n-CEA63 Extra Length          0000 (0)\n-CEA65 Comment Length        0000 (0)\n-CEA67 Disk Start            0000 (0)\n-CEA69 Int File Attributes   0000 (0)\n+CEFCD Compression Method    0000 (0) 'Stored'\n+CEFCF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CEFD3 CRC                   00000000 (0)\n+CEFD7 Compressed Size       00000000 (0)\n+CEFDB Uncompressed Size     00000000 (0)\n+CEFDF Filename Length       0031 (49)\n+CEFE1 Extra Length          0000 (0)\n+CEFE3 Comment Length        0000 (0)\n+CEFE5 Disk Start            0000 (0)\n+CEFE7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEA6B Ext File Attributes   41ED0010 (1106051088)\n+CEFE9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEA6F Local Header Offset   00004571 (17777)\n-CEA73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CEFED Local Header Offset   00004571 (17777)\n+CEFF1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEA73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEFF1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEA73: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCEFF1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEA4B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCEFC9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEAA4 CENTRAL HEADER #161   02014B50 (33639248)\n-CEAA8 Created Zip Spec      14 (20) '2.0'\n-CEAA9 Created OS            03 (3) 'Unix'\n-CEAAA Extract Zip Spec      0A (10) '1.0'\n-CEAAB Extract OS            00 (0) 'MS-DOS'\n-CEAAC General Purpose Flag  0800 (2048)\n+CF022 CENTRAL HEADER #161   02014B50 (33639248)\n+CF026 Created Zip Spec      14 (20) '2.0'\n+CF027 Created OS            03 (3) 'Unix'\n+CF028 Extract Zip Spec      0A (10) '1.0'\n+CF029 Extract OS            00 (0) 'MS-DOS'\n+CF02A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEAAE Compression Method    0000 (0) 'Stored'\n-CEAB0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEAB4 CRC                   00000000 (0)\n-CEAB8 Compressed Size       00000000 (0)\n-CEABC Uncompressed Size     00000000 (0)\n-CEAC0 Filename Length       0061 (97)\n-CEAC2 Extra Length          0000 (0)\n-CEAC4 Comment Length        0000 (0)\n-CEAC6 Disk Start            0000 (0)\n-CEAC8 Int File Attributes   0000 (0)\n+CF02C Compression Method    0000 (0) 'Stored'\n+CF02E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF032 CRC                   00000000 (0)\n+CF036 Compressed Size       00000000 (0)\n+CF03A Uncompressed Size     00000000 (0)\n+CF03E Filename Length       0061 (97)\n+CF040 Extra Length          0000 (0)\n+CF042 Comment Length        0000 (0)\n+CF044 Disk Start            0000 (0)\n+CF046 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEACA Ext File Attributes   41ED0010 (1106051088)\n+CF048 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEACE Local Header Offset   000045C0 (17856)\n-CEAD2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF04C Local Header Offset   000045C0 (17856)\n+CF050 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEAD2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF050: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEAD2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF050: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEAAA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF028: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEB33 CENTRAL HEADER #162   02014B50 (33639248)\n-CEB37 Created Zip Spec      14 (20) '2.0'\n-CEB38 Created OS            03 (3) 'Unix'\n-CEB39 Extract Zip Spec      0A (10) '1.0'\n-CEB3A Extract OS            00 (0) 'MS-DOS'\n-CEB3B General Purpose Flag  0800 (2048)\n+CF0B1 CENTRAL HEADER #162   02014B50 (33639248)\n+CF0B5 Created Zip Spec      14 (20) '2.0'\n+CF0B6 Created OS            03 (3) 'Unix'\n+CF0B7 Extract Zip Spec      0A (10) '1.0'\n+CF0B8 Extract OS            00 (0) 'MS-DOS'\n+CF0B9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEB3D Compression Method    0000 (0) 'Stored'\n-CEB3F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEB43 CRC                   00000000 (0)\n-CEB47 Compressed Size       00000000 (0)\n-CEB4B Uncompressed Size     00000000 (0)\n-CEB4F Filename Length       0068 (104)\n-CEB51 Extra Length          0000 (0)\n-CEB53 Comment Length        0000 (0)\n-CEB55 Disk Start            0000 (0)\n-CEB57 Int File Attributes   0000 (0)\n+CF0BB Compression Method    0000 (0) 'Stored'\n+CF0BD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF0C1 CRC                   00000000 (0)\n+CF0C5 Compressed Size       00000000 (0)\n+CF0C9 Uncompressed Size     00000000 (0)\n+CF0CD Filename Length       0068 (104)\n+CF0CF Extra Length          0000 (0)\n+CF0D1 Comment Length        0000 (0)\n+CF0D3 Disk Start            0000 (0)\n+CF0D5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEB59 Ext File Attributes   41ED0010 (1106051088)\n+CF0D7 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEB5D Local Header Offset   0000463F (17983)\n-CEB61 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF0DB Local Header Offset   0000463F (17983)\n+CF0DF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEB61: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF0DF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEB61: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF0DF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEB39: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF0B7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEBC9 CENTRAL HEADER #163   02014B50 (33639248)\n-CEBCD Created Zip Spec      14 (20) '2.0'\n-CEBCE Created OS            03 (3) 'Unix'\n-CEBCF Extract Zip Spec      0A (10) '1.0'\n-CEBD0 Extract OS            00 (0) 'MS-DOS'\n-CEBD1 General Purpose Flag  0800 (2048)\n+CF147 CENTRAL HEADER #163   02014B50 (33639248)\n+CF14B Created Zip Spec      14 (20) '2.0'\n+CF14C Created OS            03 (3) 'Unix'\n+CF14D Extract Zip Spec      0A (10) '1.0'\n+CF14E Extract OS            00 (0) 'MS-DOS'\n+CF14F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEBD3 Compression Method    0000 (0) 'Stored'\n-CEBD5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEBD9 CRC                   00000000 (0)\n-CEBDD Compressed Size       00000000 (0)\n-CEBE1 Uncompressed Size     00000000 (0)\n-CEBE5 Filename Length       006B (107)\n-CEBE7 Extra Length          0000 (0)\n-CEBE9 Comment Length        0000 (0)\n-CEBEB Disk Start            0000 (0)\n-CEBED Int File Attributes   0000 (0)\n+CF151 Compression Method    0000 (0) 'Stored'\n+CF153 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF157 CRC                   00000000 (0)\n+CF15B Compressed Size       00000000 (0)\n+CF15F Uncompressed Size     00000000 (0)\n+CF163 Filename Length       006B (107)\n+CF165 Extra Length          0000 (0)\n+CF167 Comment Length        0000 (0)\n+CF169 Disk Start            0000 (0)\n+CF16B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEBEF Ext File Attributes   41ED0010 (1106051088)\n+CF16D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEBF3 Local Header Offset   000046C5 (18117)\n-CEBF7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF171 Local Header Offset   000046C5 (18117)\n+CF175 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEBF7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF175: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEBF7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF175: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEBCF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF14D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEC62 CENTRAL HEADER #164   02014B50 (33639248)\n-CEC66 Created Zip Spec      14 (20) '2.0'\n-CEC67 Created OS            03 (3) 'Unix'\n-CEC68 Extract Zip Spec      0A (10) '1.0'\n-CEC69 Extract OS            00 (0) 'MS-DOS'\n-CEC6A General Purpose Flag  0800 (2048)\n+CF1E0 CENTRAL HEADER #164   02014B50 (33639248)\n+CF1E4 Created Zip Spec      14 (20) '2.0'\n+CF1E5 Created OS            03 (3) 'Unix'\n+CF1E6 Extract Zip Spec      0A (10) '1.0'\n+CF1E7 Extract OS            00 (0) 'MS-DOS'\n+CF1E8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEC6C Compression Method    0000 (0) 'Stored'\n-CEC6E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEC72 CRC                   00000000 (0)\n-CEC76 Compressed Size       00000000 (0)\n-CEC7A Uncompressed Size     00000000 (0)\n-CEC7E Filename Length       006B (107)\n-CEC80 Extra Length          0000 (0)\n-CEC82 Comment Length        0000 (0)\n-CEC84 Disk Start            0000 (0)\n-CEC86 Int File Attributes   0000 (0)\n+CF1EA Compression Method    0000 (0) 'Stored'\n+CF1EC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF1F0 CRC                   00000000 (0)\n+CF1F4 Compressed Size       00000000 (0)\n+CF1F8 Uncompressed Size     00000000 (0)\n+CF1FC Filename Length       006B (107)\n+CF1FE Extra Length          0000 (0)\n+CF200 Comment Length        0000 (0)\n+CF202 Disk Start            0000 (0)\n+CF204 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEC88 Ext File Attributes   41ED0010 (1106051088)\n+CF206 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEC8C Local Header Offset   0000474E (18254)\n-CEC90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF20A Local Header Offset   0000474E (18254)\n+CF20E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEC90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF20E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEC90: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF20E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEC68: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF1E6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CECFB CENTRAL HEADER #165   02014B50 (33639248)\n-CECFF Created Zip Spec      14 (20) '2.0'\n-CED00 Created OS            03 (3) 'Unix'\n-CED01 Extract Zip Spec      0A (10) '1.0'\n-CED02 Extract OS            00 (0) 'MS-DOS'\n-CED03 General Purpose Flag  0800 (2048)\n+CF279 CENTRAL HEADER #165   02014B50 (33639248)\n+CF27D Created Zip Spec      14 (20) '2.0'\n+CF27E Created OS            03 (3) 'Unix'\n+CF27F Extract Zip Spec      0A (10) '1.0'\n+CF280 Extract OS            00 (0) 'MS-DOS'\n+CF281 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CED05 Compression Method    0000 (0) 'Stored'\n-CED07 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CED0B CRC                   00000000 (0)\n-CED0F Compressed Size       00000000 (0)\n-CED13 Uncompressed Size     00000000 (0)\n-CED17 Filename Length       006A (106)\n-CED19 Extra Length          0000 (0)\n-CED1B Comment Length        0000 (0)\n-CED1D Disk Start            0000 (0)\n-CED1F Int File Attributes   0000 (0)\n+CF283 Compression Method    0000 (0) 'Stored'\n+CF285 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF289 CRC                   00000000 (0)\n+CF28D Compressed Size       00000000 (0)\n+CF291 Uncompressed Size     00000000 (0)\n+CF295 Filename Length       006A (106)\n+CF297 Extra Length          0000 (0)\n+CF299 Comment Length        0000 (0)\n+CF29B Disk Start            0000 (0)\n+CF29D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CED21 Ext File Attributes   41ED0010 (1106051088)\n+CF29F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CED25 Local Header Offset   000047D7 (18391)\n-CED29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF2A3 Local Header Offset   000047D7 (18391)\n+CF2A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCED29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF2A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCED29: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF2A7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCED01: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF27F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CED93 CENTRAL HEADER #166   02014B50 (33639248)\n-CED97 Created Zip Spec      14 (20) '2.0'\n-CED98 Created OS            03 (3) 'Unix'\n-CED99 Extract Zip Spec      0A (10) '1.0'\n-CED9A Extract OS            00 (0) 'MS-DOS'\n-CED9B General Purpose Flag  0800 (2048)\n+CF311 CENTRAL HEADER #166   02014B50 (33639248)\n+CF315 Created Zip Spec      14 (20) '2.0'\n+CF316 Created OS            03 (3) 'Unix'\n+CF317 Extract Zip Spec      0A (10) '1.0'\n+CF318 Extract OS            00 (0) 'MS-DOS'\n+CF319 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CED9D Compression Method    0000 (0) 'Stored'\n-CED9F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEDA3 CRC                   00000000 (0)\n-CEDA7 Compressed Size       00000000 (0)\n-CEDAB Uncompressed Size     00000000 (0)\n-CEDAF Filename Length       0026 (38)\n-CEDB1 Extra Length          0000 (0)\n-CEDB3 Comment Length        0000 (0)\n-CEDB5 Disk Start            0000 (0)\n-CEDB7 Int File Attributes   0000 (0)\n+CF31B Compression Method    0000 (0) 'Stored'\n+CF31D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF321 CRC                   00000000 (0)\n+CF325 Compressed Size       00000000 (0)\n+CF329 Uncompressed Size     00000000 (0)\n+CF32D Filename Length       0026 (38)\n+CF32F Extra Length          0000 (0)\n+CF331 Comment Length        0000 (0)\n+CF333 Disk Start            0000 (0)\n+CF335 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEDB9 Ext File Attributes   41ED0010 (1106051088)\n+CF337 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEDBD Local Header Offset   0000485F (18527)\n-CEDC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF33B Local Header Offset   0000485F (18527)\n+CF33F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEDC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF33F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEDC1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF33F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCED99: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF317: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEDE7 CENTRAL HEADER #167   02014B50 (33639248)\n-CEDEB Created Zip Spec      14 (20) '2.0'\n-CEDEC Created OS            03 (3) 'Unix'\n-CEDED Extract Zip Spec      0A (10) '1.0'\n-CEDEE Extract OS            00 (0) 'MS-DOS'\n-CEDEF General Purpose Flag  0800 (2048)\n+CF365 CENTRAL HEADER #167   02014B50 (33639248)\n+CF369 Created Zip Spec      14 (20) '2.0'\n+CF36A Created OS            03 (3) 'Unix'\n+CF36B Extract Zip Spec      0A (10) '1.0'\n+CF36C Extract OS            00 (0) 'MS-DOS'\n+CF36D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEDF1 Compression Method    0000 (0) 'Stored'\n-CEDF3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEDF7 CRC                   00000000 (0)\n-CEDFB Compressed Size       00000000 (0)\n-CEDFF Uncompressed Size     00000000 (0)\n-CEE03 Filename Length       002F (47)\n-CEE05 Extra Length          0000 (0)\n-CEE07 Comment Length        0000 (0)\n-CEE09 Disk Start            0000 (0)\n-CEE0B Int File Attributes   0000 (0)\n+CF36F Compression Method    0000 (0) 'Stored'\n+CF371 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF375 CRC                   00000000 (0)\n+CF379 Compressed Size       00000000 (0)\n+CF37D Uncompressed Size     00000000 (0)\n+CF381 Filename Length       002F (47)\n+CF383 Extra Length          0000 (0)\n+CF385 Comment Length        0000 (0)\n+CF387 Disk Start            0000 (0)\n+CF389 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEE0D Ext File Attributes   41ED0010 (1106051088)\n+CF38B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEE11 Local Header Offset   000048A3 (18595)\n-CEE15 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF38F Local Header Offset   000048A3 (18595)\n+CF393 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEE15: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF393: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEE15: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF393: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEDED: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF36B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEE44 CENTRAL HEADER #168   02014B50 (33639248)\n-CEE48 Created Zip Spec      14 (20) '2.0'\n-CEE49 Created OS            03 (3) 'Unix'\n-CEE4A Extract Zip Spec      0A (10) '1.0'\n-CEE4B Extract OS            00 (0) 'MS-DOS'\n-CEE4C General Purpose Flag  0800 (2048)\n+CF3C2 CENTRAL HEADER #168   02014B50 (33639248)\n+CF3C6 Created Zip Spec      14 (20) '2.0'\n+CF3C7 Created OS            03 (3) 'Unix'\n+CF3C8 Extract Zip Spec      0A (10) '1.0'\n+CF3C9 Extract OS            00 (0) 'MS-DOS'\n+CF3CA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEE4E Compression Method    0000 (0) 'Stored'\n-CEE50 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEE54 CRC                   00000000 (0)\n-CEE58 Compressed Size       00000000 (0)\n-CEE5C Uncompressed Size     00000000 (0)\n-CEE60 Filename Length       005D (93)\n-CEE62 Extra Length          0000 (0)\n-CEE64 Comment Length        0000 (0)\n-CEE66 Disk Start            0000 (0)\n-CEE68 Int File Attributes   0000 (0)\n+CF3CC Compression Method    0000 (0) 'Stored'\n+CF3CE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF3D2 CRC                   00000000 (0)\n+CF3D6 Compressed Size       00000000 (0)\n+CF3DA Uncompressed Size     00000000 (0)\n+CF3DE Filename Length       005D (93)\n+CF3E0 Extra Length          0000 (0)\n+CF3E2 Comment Length        0000 (0)\n+CF3E4 Disk Start            0000 (0)\n+CF3E6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEE6A Ext File Attributes   41ED0010 (1106051088)\n+CF3E8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEE6E Local Header Offset   000048F0 (18672)\n-CEE72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF3EC Local Header Offset   000048F0 (18672)\n+CF3F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEE72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF3F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEE72: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF3F0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEE4A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF3C8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEECF CENTRAL HEADER #169   02014B50 (33639248)\n-CEED3 Created Zip Spec      14 (20) '2.0'\n-CEED4 Created OS            03 (3) 'Unix'\n-CEED5 Extract Zip Spec      0A (10) '1.0'\n-CEED6 Extract OS            00 (0) 'MS-DOS'\n-CEED7 General Purpose Flag  0800 (2048)\n+CF44D CENTRAL HEADER #169   02014B50 (33639248)\n+CF451 Created Zip Spec      14 (20) '2.0'\n+CF452 Created OS            03 (3) 'Unix'\n+CF453 Extract Zip Spec      0A (10) '1.0'\n+CF454 Extract OS            00 (0) 'MS-DOS'\n+CF455 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEED9 Compression Method    0000 (0) 'Stored'\n-CEEDB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEEDF CRC                   00000000 (0)\n-CEEE3 Compressed Size       00000000 (0)\n-CEEE7 Uncompressed Size     00000000 (0)\n-CEEEB Filename Length       0035 (53)\n-CEEED Extra Length          0000 (0)\n-CEEEF Comment Length        0000 (0)\n-CEEF1 Disk Start            0000 (0)\n-CEEF3 Int File Attributes   0000 (0)\n+CF457 Compression Method    0000 (0) 'Stored'\n+CF459 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF45D CRC                   00000000 (0)\n+CF461 Compressed Size       00000000 (0)\n+CF465 Uncompressed Size     00000000 (0)\n+CF469 Filename Length       0035 (53)\n+CF46B Extra Length          0000 (0)\n+CF46D Comment Length        0000 (0)\n+CF46F Disk Start            0000 (0)\n+CF471 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEEF5 Ext File Attributes   41ED0010 (1106051088)\n+CF473 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEEF9 Local Header Offset   0000496B (18795)\n-CEEFD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF477 Local Header Offset   0000496B (18795)\n+CF47B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEEFD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF47B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEEFD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF47B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEED5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF453: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEF32 CENTRAL HEADER #170   02014B50 (33639248)\n-CEF36 Created Zip Spec      14 (20) '2.0'\n-CEF37 Created OS            03 (3) 'Unix'\n-CEF38 Extract Zip Spec      0A (10) '1.0'\n-CEF39 Extract OS            00 (0) 'MS-DOS'\n-CEF3A General Purpose Flag  0800 (2048)\n+CF4B0 CENTRAL HEADER #170   02014B50 (33639248)\n+CF4B4 Created Zip Spec      14 (20) '2.0'\n+CF4B5 Created OS            03 (3) 'Unix'\n+CF4B6 Extract Zip Spec      0A (10) '1.0'\n+CF4B7 Extract OS            00 (0) 'MS-DOS'\n+CF4B8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEF3C Compression Method    0000 (0) 'Stored'\n-CEF3E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEF42 CRC                   00000000 (0)\n-CEF46 Compressed Size       00000000 (0)\n-CEF4A Uncompressed Size     00000000 (0)\n-CEF4E Filename Length       003E (62)\n-CEF50 Extra Length          0000 (0)\n-CEF52 Comment Length        0000 (0)\n-CEF54 Disk Start            0000 (0)\n-CEF56 Int File Attributes   0000 (0)\n+CF4BA Compression Method    0000 (0) 'Stored'\n+CF4BC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF4C0 CRC                   00000000 (0)\n+CF4C4 Compressed Size       00000000 (0)\n+CF4C8 Uncompressed Size     00000000 (0)\n+CF4CC Filename Length       003E (62)\n+CF4CE Extra Length          0000 (0)\n+CF4D0 Comment Length        0000 (0)\n+CF4D2 Disk Start            0000 (0)\n+CF4D4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEF58 Ext File Attributes   41ED0010 (1106051088)\n+CF4D6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEF5C Local Header Offset   000049BE (18878)\n-CEF60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF4DA Local Header Offset   000049BE (18878)\n+CF4DE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEF60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF4DE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEF60: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF4DE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEF38: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF4B6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CEF9E CENTRAL HEADER #171   02014B50 (33639248)\n-CEFA2 Created Zip Spec      14 (20) '2.0'\n-CEFA3 Created OS            03 (3) 'Unix'\n-CEFA4 Extract Zip Spec      0A (10) '1.0'\n-CEFA5 Extract OS            00 (0) 'MS-DOS'\n-CEFA6 General Purpose Flag  0800 (2048)\n+CF51C CENTRAL HEADER #171   02014B50 (33639248)\n+CF520 Created Zip Spec      14 (20) '2.0'\n+CF521 Created OS            03 (3) 'Unix'\n+CF522 Extract Zip Spec      0A (10) '1.0'\n+CF523 Extract OS            00 (0) 'MS-DOS'\n+CF524 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CEFA8 Compression Method    0000 (0) 'Stored'\n-CEFAA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CEFAE CRC                   00000000 (0)\n-CEFB2 Compressed Size       00000000 (0)\n-CEFB6 Uncompressed Size     00000000 (0)\n-CEFBA Filename Length       0078 (120)\n-CEFBC Extra Length          0000 (0)\n-CEFBE Comment Length        0000 (0)\n-CEFC0 Disk Start            0000 (0)\n-CEFC2 Int File Attributes   0000 (0)\n+CF526 Compression Method    0000 (0) 'Stored'\n+CF528 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF52C CRC                   00000000 (0)\n+CF530 Compressed Size       00000000 (0)\n+CF534 Uncompressed Size     00000000 (0)\n+CF538 Filename Length       0078 (120)\n+CF53A Extra Length          0000 (0)\n+CF53C Comment Length        0000 (0)\n+CF53E Disk Start            0000 (0)\n+CF540 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CEFC4 Ext File Attributes   41ED0010 (1106051088)\n+CF542 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CEFC8 Local Header Offset   00004A1A (18970)\n-CEFCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF546 Local Header Offset   00004A1A (18970)\n+CF54A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCEFCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF54A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCEFCC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF54A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCEFA4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF522: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF044 CENTRAL HEADER #172   02014B50 (33639248)\n-CF048 Created Zip Spec      14 (20) '2.0'\n-CF049 Created OS            03 (3) 'Unix'\n-CF04A Extract Zip Spec      0A (10) '1.0'\n-CF04B Extract OS            00 (0) 'MS-DOS'\n-CF04C General Purpose Flag  0800 (2048)\n+CF5C2 CENTRAL HEADER #172   02014B50 (33639248)\n+CF5C6 Created Zip Spec      14 (20) '2.0'\n+CF5C7 Created OS            03 (3) 'Unix'\n+CF5C8 Extract Zip Spec      0A (10) '1.0'\n+CF5C9 Extract OS            00 (0) 'MS-DOS'\n+CF5CA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF04E Compression Method    0000 (0) 'Stored'\n-CF050 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF054 CRC                   00000000 (0)\n-CF058 Compressed Size       00000000 (0)\n-CF05C Uncompressed Size     00000000 (0)\n-CF060 Filename Length       0077 (119)\n-CF062 Extra Length          0000 (0)\n-CF064 Comment Length        0000 (0)\n-CF066 Disk Start            0000 (0)\n-CF068 Int File Attributes   0000 (0)\n+CF5CC Compression Method    0000 (0) 'Stored'\n+CF5CE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF5D2 CRC                   00000000 (0)\n+CF5D6 Compressed Size       00000000 (0)\n+CF5DA Uncompressed Size     00000000 (0)\n+CF5DE Filename Length       0077 (119)\n+CF5E0 Extra Length          0000 (0)\n+CF5E2 Comment Length        0000 (0)\n+CF5E4 Disk Start            0000 (0)\n+CF5E6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF06A Ext File Attributes   41ED0010 (1106051088)\n+CF5E8 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF06E Local Header Offset   00004AB0 (19120)\n-CF072 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF5EC Local Header Offset   00004AB0 (19120)\n+CF5F0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF072: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF5F0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF072: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF5F0: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF04A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF5C8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF0E9 CENTRAL HEADER #173   02014B50 (33639248)\n-CF0ED Created Zip Spec      14 (20) '2.0'\n-CF0EE Created OS            03 (3) 'Unix'\n-CF0EF Extract Zip Spec      0A (10) '1.0'\n-CF0F0 Extract OS            00 (0) 'MS-DOS'\n-CF0F1 General Purpose Flag  0800 (2048)\n+CF667 CENTRAL HEADER #173   02014B50 (33639248)\n+CF66B Created Zip Spec      14 (20) '2.0'\n+CF66C Created OS            03 (3) 'Unix'\n+CF66D Extract Zip Spec      0A (10) '1.0'\n+CF66E Extract OS            00 (0) 'MS-DOS'\n+CF66F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF0F3 Compression Method    0000 (0) 'Stored'\n-CF0F5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF0F9 CRC                   00000000 (0)\n-CF0FD Compressed Size       00000000 (0)\n-CF101 Uncompressed Size     00000000 (0)\n-CF105 Filename Length       007A (122)\n-CF107 Extra Length          0000 (0)\n-CF109 Comment Length        0000 (0)\n-CF10B Disk Start            0000 (0)\n-CF10D Int File Attributes   0000 (0)\n+CF671 Compression Method    0000 (0) 'Stored'\n+CF673 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF677 CRC                   00000000 (0)\n+CF67B Compressed Size       00000000 (0)\n+CF67F Uncompressed Size     00000000 (0)\n+CF683 Filename Length       007A (122)\n+CF685 Extra Length          0000 (0)\n+CF687 Comment Length        0000 (0)\n+CF689 Disk Start            0000 (0)\n+CF68B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF10F Ext File Attributes   41ED0010 (1106051088)\n+CF68D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF113 Local Header Offset   00004B45 (19269)\n-CF117 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF691 Local Header Offset   00004B45 (19269)\n+CF695 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF117: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF695: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF117: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF695: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF0EF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF66D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF191 CENTRAL HEADER #174   02014B50 (33639248)\n-CF195 Created Zip Spec      14 (20) '2.0'\n-CF196 Created OS            03 (3) 'Unix'\n-CF197 Extract Zip Spec      0A (10) '1.0'\n-CF198 Extract OS            00 (0) 'MS-DOS'\n-CF199 General Purpose Flag  0800 (2048)\n+CF70F CENTRAL HEADER #174   02014B50 (33639248)\n+CF713 Created Zip Spec      14 (20) '2.0'\n+CF714 Created OS            03 (3) 'Unix'\n+CF715 Extract Zip Spec      0A (10) '1.0'\n+CF716 Extract OS            00 (0) 'MS-DOS'\n+CF717 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF19B Compression Method    0000 (0) 'Stored'\n-CF19D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF1A1 CRC                   00000000 (0)\n-CF1A5 Compressed Size       00000000 (0)\n-CF1A9 Uncompressed Size     00000000 (0)\n-CF1AD Filename Length       0076 (118)\n-CF1AF Extra Length          0000 (0)\n-CF1B1 Comment Length        0000 (0)\n-CF1B3 Disk Start            0000 (0)\n-CF1B5 Int File Attributes   0000 (0)\n+CF719 Compression Method    0000 (0) 'Stored'\n+CF71B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF71F CRC                   00000000 (0)\n+CF723 Compressed Size       00000000 (0)\n+CF727 Uncompressed Size     00000000 (0)\n+CF72B Filename Length       0076 (118)\n+CF72D Extra Length          0000 (0)\n+CF72F Comment Length        0000 (0)\n+CF731 Disk Start            0000 (0)\n+CF733 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF1B7 Ext File Attributes   41ED0010 (1106051088)\n+CF735 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF1BB Local Header Offset   00004BDD (19421)\n-CF1BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF739 Local Header Offset   00004BDD (19421)\n+CF73D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF1BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF73D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF1BF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF73D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF197: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF715: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF235 CENTRAL HEADER #175   02014B50 (33639248)\n-CF239 Created Zip Spec      14 (20) '2.0'\n-CF23A Created OS            03 (3) 'Unix'\n-CF23B Extract Zip Spec      0A (10) '1.0'\n-CF23C Extract OS            00 (0) 'MS-DOS'\n-CF23D General Purpose Flag  0800 (2048)\n+CF7B3 CENTRAL HEADER #175   02014B50 (33639248)\n+CF7B7 Created Zip Spec      14 (20) '2.0'\n+CF7B8 Created OS            03 (3) 'Unix'\n+CF7B9 Extract Zip Spec      0A (10) '1.0'\n+CF7BA Extract OS            00 (0) 'MS-DOS'\n+CF7BB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF23F Compression Method    0000 (0) 'Stored'\n-CF241 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF245 CRC                   00000000 (0)\n-CF249 Compressed Size       00000000 (0)\n-CF24D Uncompressed Size     00000000 (0)\n-CF251 Filename Length       0024 (36)\n-CF253 Extra Length          0000 (0)\n-CF255 Comment Length        0000 (0)\n-CF257 Disk Start            0000 (0)\n-CF259 Int File Attributes   0000 (0)\n+CF7BD Compression Method    0000 (0) 'Stored'\n+CF7BF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF7C3 CRC                   00000000 (0)\n+CF7C7 Compressed Size       00000000 (0)\n+CF7CB Uncompressed Size     00000000 (0)\n+CF7CF Filename Length       0024 (36)\n+CF7D1 Extra Length          0000 (0)\n+CF7D3 Comment Length        0000 (0)\n+CF7D5 Disk Start            0000 (0)\n+CF7D7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF25B Ext File Attributes   41ED0010 (1106051088)\n+CF7D9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF25F Local Header Offset   00004C71 (19569)\n-CF263 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF7DD Local Header Offset   00004C71 (19569)\n+CF7E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF263: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF7E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF263: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF7E1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF23B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF7B9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF287 CENTRAL HEADER #176   02014B50 (33639248)\n-CF28B Created Zip Spec      14 (20) '2.0'\n-CF28C Created OS            03 (3) 'Unix'\n-CF28D Extract Zip Spec      0A (10) '1.0'\n-CF28E Extract OS            00 (0) 'MS-DOS'\n-CF28F General Purpose Flag  0800 (2048)\n+CF805 CENTRAL HEADER #176   02014B50 (33639248)\n+CF809 Created Zip Spec      14 (20) '2.0'\n+CF80A Created OS            03 (3) 'Unix'\n+CF80B Extract Zip Spec      0A (10) '1.0'\n+CF80C Extract OS            00 (0) 'MS-DOS'\n+CF80D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF291 Compression Method    0000 (0) 'Stored'\n-CF293 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF297 CRC                   00000000 (0)\n-CF29B Compressed Size       00000000 (0)\n-CF29F Uncompressed Size     00000000 (0)\n-CF2A3 Filename Length       002D (45)\n-CF2A5 Extra Length          0000 (0)\n-CF2A7 Comment Length        0000 (0)\n-CF2A9 Disk Start            0000 (0)\n-CF2AB Int File Attributes   0000 (0)\n+CF80F Compression Method    0000 (0) 'Stored'\n+CF811 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF815 CRC                   00000000 (0)\n+CF819 Compressed Size       00000000 (0)\n+CF81D Uncompressed Size     00000000 (0)\n+CF821 Filename Length       002D (45)\n+CF823 Extra Length          0000 (0)\n+CF825 Comment Length        0000 (0)\n+CF827 Disk Start            0000 (0)\n+CF829 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF2AD Ext File Attributes   41ED0010 (1106051088)\n+CF82B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF2B1 Local Header Offset   00004CB3 (19635)\n-CF2B5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF82F Local Header Offset   00004CB3 (19635)\n+CF833 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF2B5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF833: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF2B5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF833: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF28D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF80B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF2E2 CENTRAL HEADER #177   02014B50 (33639248)\n-CF2E6 Created Zip Spec      14 (20) '2.0'\n-CF2E7 Created OS            03 (3) 'Unix'\n-CF2E8 Extract Zip Spec      0A (10) '1.0'\n-CF2E9 Extract OS            00 (0) 'MS-DOS'\n-CF2EA General Purpose Flag  0800 (2048)\n+CF860 CENTRAL HEADER #177   02014B50 (33639248)\n+CF864 Created Zip Spec      14 (20) '2.0'\n+CF865 Created OS            03 (3) 'Unix'\n+CF866 Extract Zip Spec      0A (10) '1.0'\n+CF867 Extract OS            00 (0) 'MS-DOS'\n+CF868 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF2EC Compression Method    0000 (0) 'Stored'\n-CF2EE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF2F2 CRC                   00000000 (0)\n-CF2F6 Compressed Size       00000000 (0)\n-CF2FA Uncompressed Size     00000000 (0)\n-CF2FE Filename Length       005B (91)\n-CF300 Extra Length          0000 (0)\n-CF302 Comment Length        0000 (0)\n-CF304 Disk Start            0000 (0)\n-CF306 Int File Attributes   0000 (0)\n+CF86A Compression Method    0000 (0) 'Stored'\n+CF86C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF870 CRC                   00000000 (0)\n+CF874 Compressed Size       00000000 (0)\n+CF878 Uncompressed Size     00000000 (0)\n+CF87C Filename Length       005B (91)\n+CF87E Extra Length          0000 (0)\n+CF880 Comment Length        0000 (0)\n+CF882 Disk Start            0000 (0)\n+CF884 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF308 Ext File Attributes   41ED0010 (1106051088)\n+CF886 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF30C Local Header Offset   00004CFE (19710)\n-CF310 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF88A Local Header Offset   00004CFE (19710)\n+CF88E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF310: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF88E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF310: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF88E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF2E8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF866: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF36B CENTRAL HEADER #178   02014B50 (33639248)\n-CF36F Created Zip Spec      14 (20) '2.0'\n-CF370 Created OS            03 (3) 'Unix'\n-CF371 Extract Zip Spec      0A (10) '1.0'\n-CF372 Extract OS            00 (0) 'MS-DOS'\n-CF373 General Purpose Flag  0800 (2048)\n+CF8E9 CENTRAL HEADER #178   02014B50 (33639248)\n+CF8ED Created Zip Spec      14 (20) '2.0'\n+CF8EE Created OS            03 (3) 'Unix'\n+CF8EF Extract Zip Spec      0A (10) '1.0'\n+CF8F0 Extract OS            00 (0) 'MS-DOS'\n+CF8F1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF375 Compression Method    0000 (0) 'Stored'\n-CF377 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF37B CRC                   00000000 (0)\n-CF37F Compressed Size       00000000 (0)\n-CF383 Uncompressed Size     00000000 (0)\n-CF387 Filename Length       005A (90)\n-CF389 Extra Length          0000 (0)\n-CF38B Comment Length        0000 (0)\n-CF38D Disk Start            0000 (0)\n-CF38F Int File Attributes   0000 (0)\n+CF8F3 Compression Method    0000 (0) 'Stored'\n+CF8F5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF8F9 CRC                   00000000 (0)\n+CF8FD Compressed Size       00000000 (0)\n+CF901 Uncompressed Size     00000000 (0)\n+CF905 Filename Length       005A (90)\n+CF907 Extra Length          0000 (0)\n+CF909 Comment Length        0000 (0)\n+CF90B Disk Start            0000 (0)\n+CF90D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF391 Ext File Attributes   41ED0010 (1106051088)\n+CF90F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF395 Local Header Offset   00004D77 (19831)\n-CF399 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF913 Local Header Offset   00004D77 (19831)\n+CF917 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF399: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF917: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF399: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF917: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF371: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF8EF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF3F3 CENTRAL HEADER #179   02014B50 (33639248)\n-CF3F7 Created Zip Spec      14 (20) '2.0'\n-CF3F8 Created OS            03 (3) 'Unix'\n-CF3F9 Extract Zip Spec      0A (10) '1.0'\n-CF3FA Extract OS            00 (0) 'MS-DOS'\n-CF3FB General Purpose Flag  0800 (2048)\n+CF971 CENTRAL HEADER #179   02014B50 (33639248)\n+CF975 Created Zip Spec      14 (20) '2.0'\n+CF976 Created OS            03 (3) 'Unix'\n+CF977 Extract Zip Spec      0A (10) '1.0'\n+CF978 Extract OS            00 (0) 'MS-DOS'\n+CF979 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF3FD Compression Method    0000 (0) 'Stored'\n-CF3FF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF403 CRC                   00000000 (0)\n-CF407 Compressed Size       00000000 (0)\n-CF40B Uncompressed Size     00000000 (0)\n-CF40F Filename Length       005B (91)\n-CF411 Extra Length          0000 (0)\n-CF413 Comment Length        0000 (0)\n-CF415 Disk Start            0000 (0)\n-CF417 Int File Attributes   0000 (0)\n+CF97B Compression Method    0000 (0) 'Stored'\n+CF97D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CF981 CRC                   00000000 (0)\n+CF985 Compressed Size       00000000 (0)\n+CF989 Uncompressed Size     00000000 (0)\n+CF98D Filename Length       005B (91)\n+CF98F Extra Length          0000 (0)\n+CF991 Comment Length        0000 (0)\n+CF993 Disk Start            0000 (0)\n+CF995 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF419 Ext File Attributes   41ED0010 (1106051088)\n+CF997 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF41D Local Header Offset   00004DEF (19951)\n-CF421 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CF99B Local Header Offset   00004DEF (19951)\n+CF99F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF421: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF99F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF421: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCF99F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF3F9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCF977: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF47C CENTRAL HEADER #180   02014B50 (33639248)\n-CF480 Created Zip Spec      14 (20) '2.0'\n-CF481 Created OS            03 (3) 'Unix'\n-CF482 Extract Zip Spec      0A (10) '1.0'\n-CF483 Extract OS            00 (0) 'MS-DOS'\n-CF484 General Purpose Flag  0800 (2048)\n+CF9FA CENTRAL HEADER #180   02014B50 (33639248)\n+CF9FE Created Zip Spec      14 (20) '2.0'\n+CF9FF Created OS            03 (3) 'Unix'\n+CFA00 Extract Zip Spec      0A (10) '1.0'\n+CFA01 Extract OS            00 (0) 'MS-DOS'\n+CFA02 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF486 Compression Method    0000 (0) 'Stored'\n-CF488 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF48C CRC                   00000000 (0)\n-CF490 Compressed Size       00000000 (0)\n-CF494 Uncompressed Size     00000000 (0)\n-CF498 Filename Length       0023 (35)\n-CF49A Extra Length          0000 (0)\n-CF49C Comment Length        0000 (0)\n-CF49E Disk Start            0000 (0)\n-CF4A0 Int File Attributes   0000 (0)\n+CFA04 Compression Method    0000 (0) 'Stored'\n+CFA06 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFA0A CRC                   00000000 (0)\n+CFA0E Compressed Size       00000000 (0)\n+CFA12 Uncompressed Size     00000000 (0)\n+CFA16 Filename Length       0023 (35)\n+CFA18 Extra Length          0000 (0)\n+CFA1A Comment Length        0000 (0)\n+CFA1C Disk Start            0000 (0)\n+CFA1E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF4A2 Ext File Attributes   41ED0010 (1106051088)\n+CFA20 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF4A6 Local Header Offset   00004E68 (20072)\n-CF4AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFA24 Local Header Offset   00004E68 (20072)\n+CFA28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF4AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFA28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF4AA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFA28: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF482: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFA00: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF4CD CENTRAL HEADER #181   02014B50 (33639248)\n-CF4D1 Created Zip Spec      14 (20) '2.0'\n-CF4D2 Created OS            03 (3) 'Unix'\n-CF4D3 Extract Zip Spec      0A (10) '1.0'\n-CF4D4 Extract OS            00 (0) 'MS-DOS'\n-CF4D5 General Purpose Flag  0800 (2048)\n+CFA4B CENTRAL HEADER #181   02014B50 (33639248)\n+CFA4F Created Zip Spec      14 (20) '2.0'\n+CFA50 Created OS            03 (3) 'Unix'\n+CFA51 Extract Zip Spec      0A (10) '1.0'\n+CFA52 Extract OS            00 (0) 'MS-DOS'\n+CFA53 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF4D7 Compression Method    0000 (0) 'Stored'\n-CF4D9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF4DD CRC                   00000000 (0)\n-CF4E1 Compressed Size       00000000 (0)\n-CF4E5 Uncompressed Size     00000000 (0)\n-CF4E9 Filename Length       002C (44)\n-CF4EB Extra Length          0000 (0)\n-CF4ED Comment Length        0000 (0)\n-CF4EF Disk Start            0000 (0)\n-CF4F1 Int File Attributes   0000 (0)\n+CFA55 Compression Method    0000 (0) 'Stored'\n+CFA57 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFA5B CRC                   00000000 (0)\n+CFA5F Compressed Size       00000000 (0)\n+CFA63 Uncompressed Size     00000000 (0)\n+CFA67 Filename Length       002C (44)\n+CFA69 Extra Length          0000 (0)\n+CFA6B Comment Length        0000 (0)\n+CFA6D Disk Start            0000 (0)\n+CFA6F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF4F3 Ext File Attributes   41ED0010 (1106051088)\n+CFA71 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF4F7 Local Header Offset   00004EA9 (20137)\n-CF4FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFA75 Local Header Offset   00004EA9 (20137)\n+CFA79 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF4FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFA79: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF4FB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFA79: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF4D3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFA51: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF527 CENTRAL HEADER #182   02014B50 (33639248)\n-CF52B Created Zip Spec      14 (20) '2.0'\n-CF52C Created OS            03 (3) 'Unix'\n-CF52D Extract Zip Spec      0A (10) '1.0'\n-CF52E Extract OS            00 (0) 'MS-DOS'\n-CF52F General Purpose Flag  0800 (2048)\n+CFAA5 CENTRAL HEADER #182   02014B50 (33639248)\n+CFAA9 Created Zip Spec      14 (20) '2.0'\n+CFAAA Created OS            03 (3) 'Unix'\n+CFAAB Extract Zip Spec      0A (10) '1.0'\n+CFAAC Extract OS            00 (0) 'MS-DOS'\n+CFAAD General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF531 Compression Method    0000 (0) 'Stored'\n-CF533 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF537 CRC                   00000000 (0)\n-CF53B Compressed Size       00000000 (0)\n-CF53F Uncompressed Size     00000000 (0)\n-CF543 Filename Length       0054 (84)\n-CF545 Extra Length          0000 (0)\n-CF547 Comment Length        0000 (0)\n-CF549 Disk Start            0000 (0)\n-CF54B Int File Attributes   0000 (0)\n+CFAAF Compression Method    0000 (0) 'Stored'\n+CFAB1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFAB5 CRC                   00000000 (0)\n+CFAB9 Compressed Size       00000000 (0)\n+CFABD Uncompressed Size     00000000 (0)\n+CFAC1 Filename Length       0054 (84)\n+CFAC3 Extra Length          0000 (0)\n+CFAC5 Comment Length        0000 (0)\n+CFAC7 Disk Start            0000 (0)\n+CFAC9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF54D Ext File Attributes   41ED0010 (1106051088)\n+CFACB Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF551 Local Header Offset   00004EF3 (20211)\n-CF555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFACF Local Header Offset   00004EF3 (20211)\n+CFAD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFAD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF555: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFAD3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF52D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFAAB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF5A9 CENTRAL HEADER #183   02014B50 (33639248)\n-CF5AD Created Zip Spec      14 (20) '2.0'\n-CF5AE Created OS            03 (3) 'Unix'\n-CF5AF Extract Zip Spec      0A (10) '1.0'\n-CF5B0 Extract OS            00 (0) 'MS-DOS'\n-CF5B1 General Purpose Flag  0800 (2048)\n+CFB27 CENTRAL HEADER #183   02014B50 (33639248)\n+CFB2B Created Zip Spec      14 (20) '2.0'\n+CFB2C Created OS            03 (3) 'Unix'\n+CFB2D Extract Zip Spec      0A (10) '1.0'\n+CFB2E Extract OS            00 (0) 'MS-DOS'\n+CFB2F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF5B3 Compression Method    0000 (0) 'Stored'\n-CF5B5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF5B9 CRC                   00000000 (0)\n-CF5BD Compressed Size       00000000 (0)\n-CF5C1 Uncompressed Size     00000000 (0)\n-CF5C5 Filename Length       005B (91)\n-CF5C7 Extra Length          0000 (0)\n-CF5C9 Comment Length        0000 (0)\n-CF5CB Disk Start            0000 (0)\n-CF5CD Int File Attributes   0000 (0)\n+CFB31 Compression Method    0000 (0) 'Stored'\n+CFB33 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFB37 CRC                   00000000 (0)\n+CFB3B Compressed Size       00000000 (0)\n+CFB3F Uncompressed Size     00000000 (0)\n+CFB43 Filename Length       005B (91)\n+CFB45 Extra Length          0000 (0)\n+CFB47 Comment Length        0000 (0)\n+CFB49 Disk Start            0000 (0)\n+CFB4B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF5CF Ext File Attributes   41ED0010 (1106051088)\n+CFB4D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF5D3 Local Header Offset   00004F65 (20325)\n-CF5D7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFB51 Local Header Offset   00004F65 (20325)\n+CFB55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF5D7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFB55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF5D7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFB55: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF5AF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFB2D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF632 CENTRAL HEADER #184   02014B50 (33639248)\n-CF636 Created Zip Spec      14 (20) '2.0'\n-CF637 Created OS            03 (3) 'Unix'\n-CF638 Extract Zip Spec      0A (10) '1.0'\n-CF639 Extract OS            00 (0) 'MS-DOS'\n-CF63A General Purpose Flag  0800 (2048)\n+CFBB0 CENTRAL HEADER #184   02014B50 (33639248)\n+CFBB4 Created Zip Spec      14 (20) '2.0'\n+CFBB5 Created OS            03 (3) 'Unix'\n+CFBB6 Extract Zip Spec      0A (10) '1.0'\n+CFBB7 Extract OS            00 (0) 'MS-DOS'\n+CFBB8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF63C Compression Method    0000 (0) 'Stored'\n-CF63E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF642 CRC                   00000000 (0)\n-CF646 Compressed Size       00000000 (0)\n-CF64A Uncompressed Size     00000000 (0)\n-CF64E Filename Length       0059 (89)\n-CF650 Extra Length          0000 (0)\n-CF652 Comment Length        0000 (0)\n-CF654 Disk Start            0000 (0)\n-CF656 Int File Attributes   0000 (0)\n+CFBBA Compression Method    0000 (0) 'Stored'\n+CFBBC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFBC0 CRC                   00000000 (0)\n+CFBC4 Compressed Size       00000000 (0)\n+CFBC8 Uncompressed Size     00000000 (0)\n+CFBCC Filename Length       0059 (89)\n+CFBCE Extra Length          0000 (0)\n+CFBD0 Comment Length        0000 (0)\n+CFBD2 Disk Start            0000 (0)\n+CFBD4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF658 Ext File Attributes   41ED0010 (1106051088)\n+CFBD6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF65C Local Header Offset   00004FDE (20446)\n-CF660 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFBDA Local Header Offset   00004FDE (20446)\n+CFBDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF660: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFBDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF660: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFBDE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF638: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFBB6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF6B9 CENTRAL HEADER #185   02014B50 (33639248)\n-CF6BD Created Zip Spec      14 (20) '2.0'\n-CF6BE Created OS            03 (3) 'Unix'\n-CF6BF Extract Zip Spec      0A (10) '1.0'\n-CF6C0 Extract OS            00 (0) 'MS-DOS'\n-CF6C1 General Purpose Flag  0800 (2048)\n+CFC37 CENTRAL HEADER #185   02014B50 (33639248)\n+CFC3B Created Zip Spec      14 (20) '2.0'\n+CFC3C Created OS            03 (3) 'Unix'\n+CFC3D Extract Zip Spec      0A (10) '1.0'\n+CFC3E Extract OS            00 (0) 'MS-DOS'\n+CFC3F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF6C3 Compression Method    0000 (0) 'Stored'\n-CF6C5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF6C9 CRC                   00000000 (0)\n-CF6CD Compressed Size       00000000 (0)\n-CF6D1 Uncompressed Size     00000000 (0)\n-CF6D5 Filename Length       0054 (84)\n-CF6D7 Extra Length          0000 (0)\n-CF6D9 Comment Length        0000 (0)\n-CF6DB Disk Start            0000 (0)\n-CF6DD Int File Attributes   0000 (0)\n+CFC41 Compression Method    0000 (0) 'Stored'\n+CFC43 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFC47 CRC                   00000000 (0)\n+CFC4B Compressed Size       00000000 (0)\n+CFC4F Uncompressed Size     00000000 (0)\n+CFC53 Filename Length       0054 (84)\n+CFC55 Extra Length          0000 (0)\n+CFC57 Comment Length        0000 (0)\n+CFC59 Disk Start            0000 (0)\n+CFC5B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF6DF Ext File Attributes   41ED0010 (1106051088)\n+CFC5D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF6E3 Local Header Offset   00005055 (20565)\n-CF6E7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFC61 Local Header Offset   00005055 (20565)\n+CFC65 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF6E7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFC65: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF6E7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFC65: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF6BF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFC3D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF73B CENTRAL HEADER #186   02014B50 (33639248)\n-CF73F Created Zip Spec      14 (20) '2.0'\n-CF740 Created OS            03 (3) 'Unix'\n-CF741 Extract Zip Spec      0A (10) '1.0'\n-CF742 Extract OS            00 (0) 'MS-DOS'\n-CF743 General Purpose Flag  0800 (2048)\n+CFCB9 CENTRAL HEADER #186   02014B50 (33639248)\n+CFCBD Created Zip Spec      14 (20) '2.0'\n+CFCBE Created OS            03 (3) 'Unix'\n+CFCBF Extract Zip Spec      0A (10) '1.0'\n+CFCC0 Extract OS            00 (0) 'MS-DOS'\n+CFCC1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF745 Compression Method    0000 (0) 'Stored'\n-CF747 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF74B CRC                   00000000 (0)\n-CF74F Compressed Size       00000000 (0)\n-CF753 Uncompressed Size     00000000 (0)\n-CF757 Filename Length       0025 (37)\n-CF759 Extra Length          0000 (0)\n-CF75B Comment Length        0000 (0)\n-CF75D Disk Start            0000 (0)\n-CF75F Int File Attributes   0000 (0)\n+CFCC3 Compression Method    0000 (0) 'Stored'\n+CFCC5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFCC9 CRC                   00000000 (0)\n+CFCCD Compressed Size       00000000 (0)\n+CFCD1 Uncompressed Size     00000000 (0)\n+CFCD5 Filename Length       0025 (37)\n+CFCD7 Extra Length          0000 (0)\n+CFCD9 Comment Length        0000 (0)\n+CFCDB Disk Start            0000 (0)\n+CFCDD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF761 Ext File Attributes   41ED0010 (1106051088)\n+CFCDF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF765 Local Header Offset   000050C7 (20679)\n-CF769 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFCE3 Local Header Offset   000050C7 (20679)\n+CFCE7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF769: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFCE7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF769: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFCE7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF741: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFCBF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF78E CENTRAL HEADER #187   02014B50 (33639248)\n-CF792 Created Zip Spec      14 (20) '2.0'\n-CF793 Created OS            03 (3) 'Unix'\n-CF794 Extract Zip Spec      0A (10) '1.0'\n-CF795 Extract OS            00 (0) 'MS-DOS'\n-CF796 General Purpose Flag  0800 (2048)\n+CFD0C CENTRAL HEADER #187   02014B50 (33639248)\n+CFD10 Created Zip Spec      14 (20) '2.0'\n+CFD11 Created OS            03 (3) 'Unix'\n+CFD12 Extract Zip Spec      0A (10) '1.0'\n+CFD13 Extract OS            00 (0) 'MS-DOS'\n+CFD14 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF798 Compression Method    0000 (0) 'Stored'\n-CF79A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF79E CRC                   00000000 (0)\n-CF7A2 Compressed Size       00000000 (0)\n-CF7A6 Uncompressed Size     00000000 (0)\n-CF7AA Filename Length       002E (46)\n-CF7AC Extra Length          0000 (0)\n-CF7AE Comment Length        0000 (0)\n-CF7B0 Disk Start            0000 (0)\n-CF7B2 Int File Attributes   0000 (0)\n+CFD16 Compression Method    0000 (0) 'Stored'\n+CFD18 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFD1C CRC                   00000000 (0)\n+CFD20 Compressed Size       00000000 (0)\n+CFD24 Uncompressed Size     00000000 (0)\n+CFD28 Filename Length       002E (46)\n+CFD2A Extra Length          0000 (0)\n+CFD2C Comment Length        0000 (0)\n+CFD2E Disk Start            0000 (0)\n+CFD30 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF7B4 Ext File Attributes   41ED0010 (1106051088)\n+CFD32 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF7B8 Local Header Offset   0000510A (20746)\n-CF7BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFD36 Local Header Offset   0000510A (20746)\n+CFD3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF7BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFD3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF7BC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFD3A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF794: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFD12: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF7EA CENTRAL HEADER #188   02014B50 (33639248)\n-CF7EE Created Zip Spec      14 (20) '2.0'\n-CF7EF Created OS            03 (3) 'Unix'\n-CF7F0 Extract Zip Spec      0A (10) '1.0'\n-CF7F1 Extract OS            00 (0) 'MS-DOS'\n-CF7F2 General Purpose Flag  0800 (2048)\n+CFD68 CENTRAL HEADER #188   02014B50 (33639248)\n+CFD6C Created Zip Spec      14 (20) '2.0'\n+CFD6D Created OS            03 (3) 'Unix'\n+CFD6E Extract Zip Spec      0A (10) '1.0'\n+CFD6F Extract OS            00 (0) 'MS-DOS'\n+CFD70 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF7F4 Compression Method    0000 (0) 'Stored'\n-CF7F6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF7FA CRC                   00000000 (0)\n-CF7FE Compressed Size       00000000 (0)\n-CF802 Uncompressed Size     00000000 (0)\n-CF806 Filename Length       005E (94)\n-CF808 Extra Length          0000 (0)\n-CF80A Comment Length        0000 (0)\n-CF80C Disk Start            0000 (0)\n-CF80E Int File Attributes   0000 (0)\n+CFD72 Compression Method    0000 (0) 'Stored'\n+CFD74 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFD78 CRC                   00000000 (0)\n+CFD7C Compressed Size       00000000 (0)\n+CFD80 Uncompressed Size     00000000 (0)\n+CFD84 Filename Length       005E (94)\n+CFD86 Extra Length          0000 (0)\n+CFD88 Comment Length        0000 (0)\n+CFD8A Disk Start            0000 (0)\n+CFD8C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF810 Ext File Attributes   41ED0010 (1106051088)\n+CFD8E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF814 Local Header Offset   00005156 (20822)\n-CF818 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFD92 Local Header Offset   00005156 (20822)\n+CFD96 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF818: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFD96: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF818: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFD96: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF7F0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFD6E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF876 CENTRAL HEADER #189   02014B50 (33639248)\n-CF87A Created Zip Spec      14 (20) '2.0'\n-CF87B Created OS            03 (3) 'Unix'\n-CF87C Extract Zip Spec      0A (10) '1.0'\n-CF87D Extract OS            00 (0) 'MS-DOS'\n-CF87E General Purpose Flag  0800 (2048)\n+CFDF4 CENTRAL HEADER #189   02014B50 (33639248)\n+CFDF8 Created Zip Spec      14 (20) '2.0'\n+CFDF9 Created OS            03 (3) 'Unix'\n+CFDFA Extract Zip Spec      0A (10) '1.0'\n+CFDFB Extract OS            00 (0) 'MS-DOS'\n+CFDFC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF880 Compression Method    0000 (0) 'Stored'\n-CF882 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF886 CRC                   00000000 (0)\n-CF88A Compressed Size       00000000 (0)\n-CF88E Uncompressed Size     00000000 (0)\n-CF892 Filename Length       006A (106)\n-CF894 Extra Length          0000 (0)\n-CF896 Comment Length        0000 (0)\n-CF898 Disk Start            0000 (0)\n-CF89A Int File Attributes   0000 (0)\n+CFDFE Compression Method    0000 (0) 'Stored'\n+CFE00 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFE04 CRC                   00000000 (0)\n+CFE08 Compressed Size       00000000 (0)\n+CFE0C Uncompressed Size     00000000 (0)\n+CFE10 Filename Length       006A (106)\n+CFE12 Extra Length          0000 (0)\n+CFE14 Comment Length        0000 (0)\n+CFE16 Disk Start            0000 (0)\n+CFE18 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF89C Ext File Attributes   41ED0010 (1106051088)\n+CFE1A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF8A0 Local Header Offset   000051D2 (20946)\n-CF8A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFE1E Local Header Offset   000051D2 (20946)\n+CFE22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF8A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFE22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF8A4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFE22: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF87C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFDFA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF90E CENTRAL HEADER #190   02014B50 (33639248)\n-CF912 Created Zip Spec      14 (20) '2.0'\n-CF913 Created OS            03 (3) 'Unix'\n-CF914 Extract Zip Spec      0A (10) '1.0'\n-CF915 Extract OS            00 (0) 'MS-DOS'\n-CF916 General Purpose Flag  0800 (2048)\n+CFE8C CENTRAL HEADER #190   02014B50 (33639248)\n+CFE90 Created Zip Spec      14 (20) '2.0'\n+CFE91 Created OS            03 (3) 'Unix'\n+CFE92 Extract Zip Spec      0A (10) '1.0'\n+CFE93 Extract OS            00 (0) 'MS-DOS'\n+CFE94 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF918 Compression Method    0000 (0) 'Stored'\n-CF91A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF91E CRC                   00000000 (0)\n-CF922 Compressed Size       00000000 (0)\n-CF926 Uncompressed Size     00000000 (0)\n-CF92A Filename Length       0027 (39)\n-CF92C Extra Length          0000 (0)\n-CF92E Comment Length        0000 (0)\n-CF930 Disk Start            0000 (0)\n-CF932 Int File Attributes   0000 (0)\n+CFE96 Compression Method    0000 (0) 'Stored'\n+CFE98 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFE9C CRC                   00000000 (0)\n+CFEA0 Compressed Size       00000000 (0)\n+CFEA4 Uncompressed Size     00000000 (0)\n+CFEA8 Filename Length       0027 (39)\n+CFEAA Extra Length          0000 (0)\n+CFEAC Comment Length        0000 (0)\n+CFEAE Disk Start            0000 (0)\n+CFEB0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF934 Ext File Attributes   41ED0010 (1106051088)\n+CFEB2 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF938 Local Header Offset   0000525A (21082)\n-CF93C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFEB6 Local Header Offset   0000525A (21082)\n+CFEBA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF93C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFEBA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF93C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFEBA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF914: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFE92: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF963 CENTRAL HEADER #191   02014B50 (33639248)\n-CF967 Created Zip Spec      14 (20) '2.0'\n-CF968 Created OS            03 (3) 'Unix'\n-CF969 Extract Zip Spec      0A (10) '1.0'\n-CF96A Extract OS            00 (0) 'MS-DOS'\n-CF96B General Purpose Flag  0800 (2048)\n+CFEE1 CENTRAL HEADER #191   02014B50 (33639248)\n+CFEE5 Created Zip Spec      14 (20) '2.0'\n+CFEE6 Created OS            03 (3) 'Unix'\n+CFEE7 Extract Zip Spec      0A (10) '1.0'\n+CFEE8 Extract OS            00 (0) 'MS-DOS'\n+CFEE9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF96D Compression Method    0000 (0) 'Stored'\n-CF96F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF973 CRC                   00000000 (0)\n-CF977 Compressed Size       00000000 (0)\n-CF97B Uncompressed Size     00000000 (0)\n-CF97F Filename Length       0030 (48)\n-CF981 Extra Length          0000 (0)\n-CF983 Comment Length        0000 (0)\n-CF985 Disk Start            0000 (0)\n-CF987 Int File Attributes   0000 (0)\n+CFEEB Compression Method    0000 (0) 'Stored'\n+CFEED Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFEF1 CRC                   00000000 (0)\n+CFEF5 Compressed Size       00000000 (0)\n+CFEF9 Uncompressed Size     00000000 (0)\n+CFEFD Filename Length       0030 (48)\n+CFEFF Extra Length          0000 (0)\n+CFF01 Comment Length        0000 (0)\n+CFF03 Disk Start            0000 (0)\n+CFF05 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF989 Ext File Attributes   41ED0010 (1106051088)\n+CFF07 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF98D Local Header Offset   0000529F (21151)\n-CF991 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFF0B Local Header Offset   0000529F (21151)\n+CFF0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF991: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFF0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF991: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFF0F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF969: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFEE7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CF9C1 CENTRAL HEADER #192   02014B50 (33639248)\n-CF9C5 Created Zip Spec      14 (20) '2.0'\n-CF9C6 Created OS            03 (3) 'Unix'\n-CF9C7 Extract Zip Spec      0A (10) '1.0'\n-CF9C8 Extract OS            00 (0) 'MS-DOS'\n-CF9C9 General Purpose Flag  0800 (2048)\n+CFF3F CENTRAL HEADER #192   02014B50 (33639248)\n+CFF43 Created Zip Spec      14 (20) '2.0'\n+CFF44 Created OS            03 (3) 'Unix'\n+CFF45 Extract Zip Spec      0A (10) '1.0'\n+CFF46 Extract OS            00 (0) 'MS-DOS'\n+CFF47 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CF9CB Compression Method    0000 (0) 'Stored'\n-CF9CD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CF9D1 CRC                   00000000 (0)\n-CF9D5 Compressed Size       00000000 (0)\n-CF9D9 Uncompressed Size     00000000 (0)\n-CF9DD Filename Length       0069 (105)\n-CF9DF Extra Length          0000 (0)\n-CF9E1 Comment Length        0000 (0)\n-CF9E3 Disk Start            0000 (0)\n-CF9E5 Int File Attributes   0000 (0)\n+CFF49 Compression Method    0000 (0) 'Stored'\n+CFF4B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFF4F CRC                   00000000 (0)\n+CFF53 Compressed Size       00000000 (0)\n+CFF57 Uncompressed Size     00000000 (0)\n+CFF5B Filename Length       0069 (105)\n+CFF5D Extra Length          0000 (0)\n+CFF5F Comment Length        0000 (0)\n+CFF61 Disk Start            0000 (0)\n+CFF63 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CF9E7 Ext File Attributes   41ED0010 (1106051088)\n+CFF65 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CF9EB Local Header Offset   000052ED (21229)\n-CF9EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+CFF69 Local Header Offset   000052ED (21229)\n+CFF6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCF9EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFF6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCF9EF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xCFF6D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCF9C7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFF45: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFA58 CENTRAL HEADER #193   02014B50 (33639248)\n-CFA5C Created Zip Spec      14 (20) '2.0'\n-CFA5D Created OS            03 (3) 'Unix'\n-CFA5E Extract Zip Spec      0A (10) '1.0'\n-CFA5F Extract OS            00 (0) 'MS-DOS'\n-CFA60 General Purpose Flag  0800 (2048)\n+CFFD6 CENTRAL HEADER #193   02014B50 (33639248)\n+CFFDA Created Zip Spec      14 (20) '2.0'\n+CFFDB Created OS            03 (3) 'Unix'\n+CFFDC Extract Zip Spec      0A (10) '1.0'\n+CFFDD Extract OS            00 (0) 'MS-DOS'\n+CFFDE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFA62 Compression Method    0000 (0) 'Stored'\n-CFA64 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFA68 CRC                   00000000 (0)\n-CFA6C Compressed Size       00000000 (0)\n-CFA70 Uncompressed Size     00000000 (0)\n-CFA74 Filename Length       0064 (100)\n-CFA76 Extra Length          0000 (0)\n-CFA78 Comment Length        0000 (0)\n-CFA7A Disk Start            0000 (0)\n-CFA7C Int File Attributes   0000 (0)\n+CFFE0 Compression Method    0000 (0) 'Stored'\n+CFFE2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+CFFE6 CRC                   00000000 (0)\n+CFFEA Compressed Size       00000000 (0)\n+CFFEE Uncompressed Size     00000000 (0)\n+CFFF2 Filename Length       0064 (100)\n+CFFF4 Extra Length          0000 (0)\n+CFFF6 Comment Length        0000 (0)\n+CFFF8 Disk Start            0000 (0)\n+CFFFA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFA7E Ext File Attributes   41ED0010 (1106051088)\n+CFFFC Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFA82 Local Header Offset   00005374 (21364)\n-CFA86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0000 Local Header Offset   00005374 (21364)\n+D0004 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFA86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0004: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFA86: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0004: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFA5E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xCFFDC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFAEA CENTRAL HEADER #194   02014B50 (33639248)\n-CFAEE Created Zip Spec      14 (20) '2.0'\n-CFAEF Created OS            03 (3) 'Unix'\n-CFAF0 Extract Zip Spec      0A (10) '1.0'\n-CFAF1 Extract OS            00 (0) 'MS-DOS'\n-CFAF2 General Purpose Flag  0800 (2048)\n+D0068 CENTRAL HEADER #194   02014B50 (33639248)\n+D006C Created Zip Spec      14 (20) '2.0'\n+D006D Created OS            03 (3) 'Unix'\n+D006E Extract Zip Spec      0A (10) '1.0'\n+D006F Extract OS            00 (0) 'MS-DOS'\n+D0070 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFAF4 Compression Method    0000 (0) 'Stored'\n-CFAF6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFAFA CRC                   00000000 (0)\n-CFAFE Compressed Size       00000000 (0)\n-CFB02 Uncompressed Size     00000000 (0)\n-CFB06 Filename Length       006C (108)\n-CFB08 Extra Length          0000 (0)\n-CFB0A Comment Length        0000 (0)\n-CFB0C Disk Start            0000 (0)\n-CFB0E Int File Attributes   0000 (0)\n+D0072 Compression Method    0000 (0) 'Stored'\n+D0074 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0078 CRC                   00000000 (0)\n+D007C Compressed Size       00000000 (0)\n+D0080 Uncompressed Size     00000000 (0)\n+D0084 Filename Length       006C (108)\n+D0086 Extra Length          0000 (0)\n+D0088 Comment Length        0000 (0)\n+D008A Disk Start            0000 (0)\n+D008C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFB10 Ext File Attributes   41ED0010 (1106051088)\n+D008E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFB14 Local Header Offset   000053F6 (21494)\n-CFB18 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0092 Local Header Offset   000053F6 (21494)\n+D0096 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFB18: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0096: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFB18: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0096: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFAF0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD006E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFB84 CENTRAL HEADER #195   02014B50 (33639248)\n-CFB88 Created Zip Spec      14 (20) '2.0'\n-CFB89 Created OS            03 (3) 'Unix'\n-CFB8A Extract Zip Spec      0A (10) '1.0'\n-CFB8B Extract OS            00 (0) 'MS-DOS'\n-CFB8C General Purpose Flag  0800 (2048)\n+D0102 CENTRAL HEADER #195   02014B50 (33639248)\n+D0106 Created Zip Spec      14 (20) '2.0'\n+D0107 Created OS            03 (3) 'Unix'\n+D0108 Extract Zip Spec      0A (10) '1.0'\n+D0109 Extract OS            00 (0) 'MS-DOS'\n+D010A General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFB8E Compression Method    0000 (0) 'Stored'\n-CFB90 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFB94 CRC                   00000000 (0)\n-CFB98 Compressed Size       00000000 (0)\n-CFB9C Uncompressed Size     00000000 (0)\n-CFBA0 Filename Length       0069 (105)\n-CFBA2 Extra Length          0000 (0)\n-CFBA4 Comment Length        0000 (0)\n-CFBA6 Disk Start            0000 (0)\n-CFBA8 Int File Attributes   0000 (0)\n+D010C Compression Method    0000 (0) 'Stored'\n+D010E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0112 CRC                   00000000 (0)\n+D0116 Compressed Size       00000000 (0)\n+D011A Uncompressed Size     00000000 (0)\n+D011E Filename Length       0069 (105)\n+D0120 Extra Length          0000 (0)\n+D0122 Comment Length        0000 (0)\n+D0124 Disk Start            0000 (0)\n+D0126 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFBAA Ext File Attributes   41ED0010 (1106051088)\n+D0128 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFBAE Local Header Offset   00005480 (21632)\n-CFBB2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D012C Local Header Offset   00005480 (21632)\n+D0130 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFBB2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0130: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFBB2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0130: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFB8A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0108: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFC1B CENTRAL HEADER #196   02014B50 (33639248)\n-CFC1F Created Zip Spec      14 (20) '2.0'\n-CFC20 Created OS            03 (3) 'Unix'\n-CFC21 Extract Zip Spec      0A (10) '1.0'\n-CFC22 Extract OS            00 (0) 'MS-DOS'\n-CFC23 General Purpose Flag  0800 (2048)\n+D0199 CENTRAL HEADER #196   02014B50 (33639248)\n+D019D Created Zip Spec      14 (20) '2.0'\n+D019E Created OS            03 (3) 'Unix'\n+D019F Extract Zip Spec      0A (10) '1.0'\n+D01A0 Extract OS            00 (0) 'MS-DOS'\n+D01A1 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFC25 Compression Method    0000 (0) 'Stored'\n-CFC27 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFC2B CRC                   00000000 (0)\n-CFC2F Compressed Size       00000000 (0)\n-CFC33 Uncompressed Size     00000000 (0)\n-CFC37 Filename Length       0060 (96)\n-CFC39 Extra Length          0000 (0)\n-CFC3B Comment Length        0000 (0)\n-CFC3D Disk Start            0000 (0)\n-CFC3F Int File Attributes   0000 (0)\n+D01A3 Compression Method    0000 (0) 'Stored'\n+D01A5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D01A9 CRC                   00000000 (0)\n+D01AD Compressed Size       00000000 (0)\n+D01B1 Uncompressed Size     00000000 (0)\n+D01B5 Filename Length       0060 (96)\n+D01B7 Extra Length          0000 (0)\n+D01B9 Comment Length        0000 (0)\n+D01BB Disk Start            0000 (0)\n+D01BD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFC41 Ext File Attributes   41ED0010 (1106051088)\n+D01BF Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFC45 Local Header Offset   00005507 (21767)\n-CFC49 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D01C3 Local Header Offset   00005507 (21767)\n+D01C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFC49: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD01C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFC49: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD01C7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFC21: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD019F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFCA9 CENTRAL HEADER #197   02014B50 (33639248)\n-CFCAD Created Zip Spec      14 (20) '2.0'\n-CFCAE Created OS            03 (3) 'Unix'\n-CFCAF Extract Zip Spec      0A (10) '1.0'\n-CFCB0 Extract OS            00 (0) 'MS-DOS'\n-CFCB1 General Purpose Flag  0800 (2048)\n+D0227 CENTRAL HEADER #197   02014B50 (33639248)\n+D022B Created Zip Spec      14 (20) '2.0'\n+D022C Created OS            03 (3) 'Unix'\n+D022D Extract Zip Spec      0A (10) '1.0'\n+D022E Extract OS            00 (0) 'MS-DOS'\n+D022F General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFCB3 Compression Method    0000 (0) 'Stored'\n-CFCB5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFCB9 CRC                   00000000 (0)\n-CFCBD Compressed Size       00000000 (0)\n-CFCC1 Uncompressed Size     00000000 (0)\n-CFCC5 Filename Length       005E (94)\n-CFCC7 Extra Length          0000 (0)\n-CFCC9 Comment Length        0000 (0)\n-CFCCB Disk Start            0000 (0)\n-CFCCD Int File Attributes   0000 (0)\n+D0231 Compression Method    0000 (0) 'Stored'\n+D0233 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0237 CRC                   00000000 (0)\n+D023B Compressed Size       00000000 (0)\n+D023F Uncompressed Size     00000000 (0)\n+D0243 Filename Length       005E (94)\n+D0245 Extra Length          0000 (0)\n+D0247 Comment Length        0000 (0)\n+D0249 Disk Start            0000 (0)\n+D024B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFCCF Ext File Attributes   41ED0010 (1106051088)\n+D024D Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFCD3 Local Header Offset   00005585 (21893)\n-CFCD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0251 Local Header Offset   00005585 (21893)\n+D0255 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFCD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0255: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFCD7: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0255: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFCAF: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD022D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFD35 CENTRAL HEADER #198   02014B50 (33639248)\n-CFD39 Created Zip Spec      14 (20) '2.0'\n-CFD3A Created OS            03 (3) 'Unix'\n-CFD3B Extract Zip Spec      0A (10) '1.0'\n-CFD3C Extract OS            00 (0) 'MS-DOS'\n-CFD3D General Purpose Flag  0800 (2048)\n+D02B3 CENTRAL HEADER #198   02014B50 (33639248)\n+D02B7 Created Zip Spec      14 (20) '2.0'\n+D02B8 Created OS            03 (3) 'Unix'\n+D02B9 Extract Zip Spec      0A (10) '1.0'\n+D02BA Extract OS            00 (0) 'MS-DOS'\n+D02BB General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFD3F Compression Method    0000 (0) 'Stored'\n-CFD41 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFD45 CRC                   00000000 (0)\n-CFD49 Compressed Size       00000000 (0)\n-CFD4D Uncompressed Size     00000000 (0)\n-CFD51 Filename Length       0065 (101)\n-CFD53 Extra Length          0000 (0)\n-CFD55 Comment Length        0000 (0)\n-CFD57 Disk Start            0000 (0)\n-CFD59 Int File Attributes   0000 (0)\n+D02BD Compression Method    0000 (0) 'Stored'\n+D02BF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D02C3 CRC                   00000000 (0)\n+D02C7 Compressed Size       00000000 (0)\n+D02CB Uncompressed Size     00000000 (0)\n+D02CF Filename Length       0065 (101)\n+D02D1 Extra Length          0000 (0)\n+D02D3 Comment Length        0000 (0)\n+D02D5 Disk Start            0000 (0)\n+D02D7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFD5B Ext File Attributes   41ED0010 (1106051088)\n+D02D9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFD5F Local Header Offset   00005601 (22017)\n-CFD63 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D02DD Local Header Offset   00005601 (22017)\n+D02E1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFD63: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD02E1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFD63: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD02E1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFD3B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD02B9: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFDC8 CENTRAL HEADER #199   02014B50 (33639248)\n-CFDCC Created Zip Spec      14 (20) '2.0'\n-CFDCD Created OS            03 (3) 'Unix'\n-CFDCE Extract Zip Spec      0A (10) '1.0'\n-CFDCF Extract OS            00 (0) 'MS-DOS'\n-CFDD0 General Purpose Flag  0800 (2048)\n+D0346 CENTRAL HEADER #199   02014B50 (33639248)\n+D034A Created Zip Spec      14 (20) '2.0'\n+D034B Created OS            03 (3) 'Unix'\n+D034C Extract Zip Spec      0A (10) '1.0'\n+D034D Extract OS            00 (0) 'MS-DOS'\n+D034E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFDD2 Compression Method    0000 (0) 'Stored'\n-CFDD4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFDD8 CRC                   00000000 (0)\n-CFDDC Compressed Size       00000000 (0)\n-CFDE0 Uncompressed Size     00000000 (0)\n-CFDE4 Filename Length       0063 (99)\n-CFDE6 Extra Length          0000 (0)\n-CFDE8 Comment Length        0000 (0)\n-CFDEA Disk Start            0000 (0)\n-CFDEC Int File Attributes   0000 (0)\n+D0350 Compression Method    0000 (0) 'Stored'\n+D0352 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0356 CRC                   00000000 (0)\n+D035A Compressed Size       00000000 (0)\n+D035E Uncompressed Size     00000000 (0)\n+D0362 Filename Length       0063 (99)\n+D0364 Extra Length          0000 (0)\n+D0366 Comment Length        0000 (0)\n+D0368 Disk Start            0000 (0)\n+D036A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFDEE Ext File Attributes   41ED0010 (1106051088)\n+D036C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFDF2 Local Header Offset   00005684 (22148)\n-CFDF6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0370 Local Header Offset   00005684 (22148)\n+D0374 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFDF6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0374: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFDF6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0374: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFDCE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD034C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFE59 CENTRAL HEADER #200   02014B50 (33639248)\n-CFE5D Created Zip Spec      14 (20) '2.0'\n-CFE5E Created OS            03 (3) 'Unix'\n-CFE5F Extract Zip Spec      0A (10) '1.0'\n-CFE60 Extract OS            00 (0) 'MS-DOS'\n-CFE61 General Purpose Flag  0800 (2048)\n+D03D7 CENTRAL HEADER #200   02014B50 (33639248)\n+D03DB Created Zip Spec      14 (20) '2.0'\n+D03DC Created OS            03 (3) 'Unix'\n+D03DD Extract Zip Spec      0A (10) '1.0'\n+D03DE Extract OS            00 (0) 'MS-DOS'\n+D03DF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFE63 Compression Method    0000 (0) 'Stored'\n-CFE65 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFE69 CRC                   00000000 (0)\n-CFE6D Compressed Size       00000000 (0)\n-CFE71 Uncompressed Size     00000000 (0)\n-CFE75 Filename Length       0069 (105)\n-CFE77 Extra Length          0000 (0)\n-CFE79 Comment Length        0000 (0)\n-CFE7B Disk Start            0000 (0)\n-CFE7D Int File Attributes   0000 (0)\n+D03E1 Compression Method    0000 (0) 'Stored'\n+D03E3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D03E7 CRC                   00000000 (0)\n+D03EB Compressed Size       00000000 (0)\n+D03EF Uncompressed Size     00000000 (0)\n+D03F3 Filename Length       0069 (105)\n+D03F5 Extra Length          0000 (0)\n+D03F7 Comment Length        0000 (0)\n+D03F9 Disk Start            0000 (0)\n+D03FB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFE7F Ext File Attributes   41ED0010 (1106051088)\n+D03FD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFE83 Local Header Offset   00005705 (22277)\n-CFE87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0401 Local Header Offset   00005705 (22277)\n+D0405 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFE87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0405: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFE87: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0405: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFE5F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD03DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFEF0 CENTRAL HEADER #201   02014B50 (33639248)\n-CFEF4 Created Zip Spec      14 (20) '2.0'\n-CFEF5 Created OS            03 (3) 'Unix'\n-CFEF6 Extract Zip Spec      0A (10) '1.0'\n-CFEF7 Extract OS            00 (0) 'MS-DOS'\n-CFEF8 General Purpose Flag  0800 (2048)\n+D046E CENTRAL HEADER #201   02014B50 (33639248)\n+D0472 Created Zip Spec      14 (20) '2.0'\n+D0473 Created OS            03 (3) 'Unix'\n+D0474 Extract Zip Spec      0A (10) '1.0'\n+D0475 Extract OS            00 (0) 'MS-DOS'\n+D0476 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFEFA Compression Method    0000 (0) 'Stored'\n-CFEFC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFF00 CRC                   00000000 (0)\n-CFF04 Compressed Size       00000000 (0)\n-CFF08 Uncompressed Size     00000000 (0)\n-CFF0C Filename Length       0060 (96)\n-CFF0E Extra Length          0000 (0)\n-CFF10 Comment Length        0000 (0)\n-CFF12 Disk Start            0000 (0)\n-CFF14 Int File Attributes   0000 (0)\n+D0478 Compression Method    0000 (0) 'Stored'\n+D047A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D047E CRC                   00000000 (0)\n+D0482 Compressed Size       00000000 (0)\n+D0486 Uncompressed Size     00000000 (0)\n+D048A Filename Length       0060 (96)\n+D048C Extra Length          0000 (0)\n+D048E Comment Length        0000 (0)\n+D0490 Disk Start            0000 (0)\n+D0492 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFF16 Ext File Attributes   41ED0010 (1106051088)\n+D0494 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFF1A Local Header Offset   0000578C (22412)\n-CFF1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0498 Local Header Offset   0000578C (22412)\n+D049C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFF1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD049C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFF1E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD049C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFEF6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0474: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-CFF7E CENTRAL HEADER #202   02014B50 (33639248)\n-CFF82 Created Zip Spec      14 (20) '2.0'\n-CFF83 Created OS            03 (3) 'Unix'\n-CFF84 Extract Zip Spec      0A (10) '1.0'\n-CFF85 Extract OS            00 (0) 'MS-DOS'\n-CFF86 General Purpose Flag  0800 (2048)\n+D04FC CENTRAL HEADER #202   02014B50 (33639248)\n+D0500 Created Zip Spec      14 (20) '2.0'\n+D0501 Created OS            03 (3) 'Unix'\n+D0502 Extract Zip Spec      0A (10) '1.0'\n+D0503 Extract OS            00 (0) 'MS-DOS'\n+D0504 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-CFF88 Compression Method    0000 (0) 'Stored'\n-CFF8A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-CFF8E CRC                   00000000 (0)\n-CFF92 Compressed Size       00000000 (0)\n-CFF96 Uncompressed Size     00000000 (0)\n-CFF9A Filename Length       0063 (99)\n-CFF9C Extra Length          0000 (0)\n-CFF9E Comment Length        0000 (0)\n-CFFA0 Disk Start            0000 (0)\n-CFFA2 Int File Attributes   0000 (0)\n+D0506 Compression Method    0000 (0) 'Stored'\n+D0508 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D050C CRC                   00000000 (0)\n+D0510 Compressed Size       00000000 (0)\n+D0514 Uncompressed Size     00000000 (0)\n+D0518 Filename Length       0063 (99)\n+D051A Extra Length          0000 (0)\n+D051C Comment Length        0000 (0)\n+D051E Disk Start            0000 (0)\n+D0520 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-CFFA4 Ext File Attributes   41ED0010 (1106051088)\n+D0522 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-CFFA8 Local Header Offset   0000580A (22538)\n-CFFAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0526 Local Header Offset   0000580A (22538)\n+D052A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xCFFAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD052A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xCFFAC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD052A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xCFF84: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0502: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D000F CENTRAL HEADER #203   02014B50 (33639248)\n-D0013 Created Zip Spec      14 (20) '2.0'\n-D0014 Created OS            03 (3) 'Unix'\n-D0015 Extract Zip Spec      0A (10) '1.0'\n-D0016 Extract OS            00 (0) 'MS-DOS'\n-D0017 General Purpose Flag  0800 (2048)\n+D058D CENTRAL HEADER #203   02014B50 (33639248)\n+D0591 Created Zip Spec      14 (20) '2.0'\n+D0592 Created OS            03 (3) 'Unix'\n+D0593 Extract Zip Spec      0A (10) '1.0'\n+D0594 Extract OS            00 (0) 'MS-DOS'\n+D0595 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0019 Compression Method    0000 (0) 'Stored'\n-D001B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D001F CRC                   00000000 (0)\n-D0023 Compressed Size       00000000 (0)\n-D0027 Uncompressed Size     00000000 (0)\n-D002B Filename Length       005F (95)\n-D002D Extra Length          0000 (0)\n-D002F Comment Length        0000 (0)\n-D0031 Disk Start            0000 (0)\n-D0033 Int File Attributes   0000 (0)\n+D0597 Compression Method    0000 (0) 'Stored'\n+D0599 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D059D CRC                   00000000 (0)\n+D05A1 Compressed Size       00000000 (0)\n+D05A5 Uncompressed Size     00000000 (0)\n+D05A9 Filename Length       005F (95)\n+D05AB Extra Length          0000 (0)\n+D05AD Comment Length        0000 (0)\n+D05AF Disk Start            0000 (0)\n+D05B1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0035 Ext File Attributes   41ED0010 (1106051088)\n+D05B3 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0039 Local Header Offset   0000588B (22667)\n-D003D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D05B7 Local Header Offset   0000588B (22667)\n+D05BB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD003D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD05BB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD003D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD05BB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0015: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0593: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D009C CENTRAL HEADER #204   02014B50 (33639248)\n-D00A0 Created Zip Spec      14 (20) '2.0'\n-D00A1 Created OS            03 (3) 'Unix'\n-D00A2 Extract Zip Spec      0A (10) '1.0'\n-D00A3 Extract OS            00 (0) 'MS-DOS'\n-D00A4 General Purpose Flag  0800 (2048)\n+D061A CENTRAL HEADER #204   02014B50 (33639248)\n+D061E Created Zip Spec      14 (20) '2.0'\n+D061F Created OS            03 (3) 'Unix'\n+D0620 Extract Zip Spec      0A (10) '1.0'\n+D0621 Extract OS            00 (0) 'MS-DOS'\n+D0622 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D00A6 Compression Method    0000 (0) 'Stored'\n-D00A8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D00AC CRC                   00000000 (0)\n-D00B0 Compressed Size       00000000 (0)\n-D00B4 Uncompressed Size     00000000 (0)\n-D00B8 Filename Length       0067 (103)\n-D00BA Extra Length          0000 (0)\n-D00BC Comment Length        0000 (0)\n-D00BE Disk Start            0000 (0)\n-D00C0 Int File Attributes   0000 (0)\n+D0624 Compression Method    0000 (0) 'Stored'\n+D0626 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D062A CRC                   00000000 (0)\n+D062E Compressed Size       00000000 (0)\n+D0632 Uncompressed Size     00000000 (0)\n+D0636 Filename Length       0067 (103)\n+D0638 Extra Length          0000 (0)\n+D063A Comment Length        0000 (0)\n+D063C Disk Start            0000 (0)\n+D063E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D00C2 Ext File Attributes   41ED0010 (1106051088)\n+D0640 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D00C6 Local Header Offset   00005908 (22792)\n-D00CA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0644 Local Header Offset   00005908 (22792)\n+D0648 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD00CA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0648: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD00CA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0648: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD00A2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0620: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0131 CENTRAL HEADER #205   02014B50 (33639248)\n-D0135 Created Zip Spec      14 (20) '2.0'\n-D0136 Created OS            03 (3) 'Unix'\n-D0137 Extract Zip Spec      0A (10) '1.0'\n-D0138 Extract OS            00 (0) 'MS-DOS'\n-D0139 General Purpose Flag  0800 (2048)\n+D06AF CENTRAL HEADER #205   02014B50 (33639248)\n+D06B3 Created Zip Spec      14 (20) '2.0'\n+D06B4 Created OS            03 (3) 'Unix'\n+D06B5 Extract Zip Spec      0A (10) '1.0'\n+D06B6 Extract OS            00 (0) 'MS-DOS'\n+D06B7 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D013B Compression Method    0000 (0) 'Stored'\n-D013D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0141 CRC                   00000000 (0)\n-D0145 Compressed Size       00000000 (0)\n-D0149 Uncompressed Size     00000000 (0)\n-D014D Filename Length       0066 (102)\n-D014F Extra Length          0000 (0)\n-D0151 Comment Length        0000 (0)\n-D0153 Disk Start            0000 (0)\n-D0155 Int File Attributes   0000 (0)\n+D06B9 Compression Method    0000 (0) 'Stored'\n+D06BB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D06BF CRC                   00000000 (0)\n+D06C3 Compressed Size       00000000 (0)\n+D06C7 Uncompressed Size     00000000 (0)\n+D06CB Filename Length       0066 (102)\n+D06CD Extra Length          0000 (0)\n+D06CF Comment Length        0000 (0)\n+D06D1 Disk Start            0000 (0)\n+D06D3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0157 Ext File Attributes   41ED0010 (1106051088)\n+D06D5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D015B Local Header Offset   0000598D (22925)\n-D015F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D06D9 Local Header Offset   0000598D (22925)\n+D06DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD015F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD06DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD015F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD06DD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0137: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD06B5: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D01C5 CENTRAL HEADER #206   02014B50 (33639248)\n-D01C9 Created Zip Spec      14 (20) '2.0'\n-D01CA Created OS            03 (3) 'Unix'\n-D01CB Extract Zip Spec      0A (10) '1.0'\n-D01CC Extract OS            00 (0) 'MS-DOS'\n-D01CD General Purpose Flag  0800 (2048)\n+D0743 CENTRAL HEADER #206   02014B50 (33639248)\n+D0747 Created Zip Spec      14 (20) '2.0'\n+D0748 Created OS            03 (3) 'Unix'\n+D0749 Extract Zip Spec      0A (10) '1.0'\n+D074A Extract OS            00 (0) 'MS-DOS'\n+D074B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D01CF Compression Method    0000 (0) 'Stored'\n-D01D1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D01D5 CRC                   00000000 (0)\n-D01D9 Compressed Size       00000000 (0)\n-D01DD Uncompressed Size     00000000 (0)\n-D01E1 Filename Length       0067 (103)\n-D01E3 Extra Length          0000 (0)\n-D01E5 Comment Length        0000 (0)\n-D01E7 Disk Start            0000 (0)\n-D01E9 Int File Attributes   0000 (0)\n+D074D Compression Method    0000 (0) 'Stored'\n+D074F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0753 CRC                   00000000 (0)\n+D0757 Compressed Size       00000000 (0)\n+D075B Uncompressed Size     00000000 (0)\n+D075F Filename Length       0067 (103)\n+D0761 Extra Length          0000 (0)\n+D0763 Comment Length        0000 (0)\n+D0765 Disk Start            0000 (0)\n+D0767 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D01EB Ext File Attributes   41ED0010 (1106051088)\n+D0769 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D01EF Local Header Offset   00005A11 (23057)\n-D01F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D076D Local Header Offset   00005A11 (23057)\n+D0771 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD01F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0771: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD01F3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0771: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD01CB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0749: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D025A CENTRAL HEADER #207   02014B50 (33639248)\n-D025E Created Zip Spec      14 (20) '2.0'\n-D025F Created OS            03 (3) 'Unix'\n-D0260 Extract Zip Spec      0A (10) '1.0'\n-D0261 Extract OS            00 (0) 'MS-DOS'\n-D0262 General Purpose Flag  0800 (2048)\n+D07D8 CENTRAL HEADER #207   02014B50 (33639248)\n+D07DC Created Zip Spec      14 (20) '2.0'\n+D07DD Created OS            03 (3) 'Unix'\n+D07DE Extract Zip Spec      0A (10) '1.0'\n+D07DF Extract OS            00 (0) 'MS-DOS'\n+D07E0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0264 Compression Method    0000 (0) 'Stored'\n-D0266 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D026A CRC                   00000000 (0)\n-D026E Compressed Size       00000000 (0)\n-D0272 Uncompressed Size     00000000 (0)\n-D0276 Filename Length       0065 (101)\n-D0278 Extra Length          0000 (0)\n-D027A Comment Length        0000 (0)\n-D027C Disk Start            0000 (0)\n-D027E Int File Attributes   0000 (0)\n+D07E2 Compression Method    0000 (0) 'Stored'\n+D07E4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D07E8 CRC                   00000000 (0)\n+D07EC Compressed Size       00000000 (0)\n+D07F0 Uncompressed Size     00000000 (0)\n+D07F4 Filename Length       0065 (101)\n+D07F6 Extra Length          0000 (0)\n+D07F8 Comment Length        0000 (0)\n+D07FA Disk Start            0000 (0)\n+D07FC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0280 Ext File Attributes   41ED0010 (1106051088)\n+D07FE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0284 Local Header Offset   00005A96 (23190)\n-D0288 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0802 Local Header Offset   00005A96 (23190)\n+D0806 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0288: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0806: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0288: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0806: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0260: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD07DE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D02ED CENTRAL HEADER #208   02014B50 (33639248)\n-D02F1 Created Zip Spec      14 (20) '2.0'\n-D02F2 Created OS            03 (3) 'Unix'\n-D02F3 Extract Zip Spec      0A (10) '1.0'\n-D02F4 Extract OS            00 (0) 'MS-DOS'\n-D02F5 General Purpose Flag  0800 (2048)\n+D086B CENTRAL HEADER #208   02014B50 (33639248)\n+D086F Created Zip Spec      14 (20) '2.0'\n+D0870 Created OS            03 (3) 'Unix'\n+D0871 Extract Zip Spec      0A (10) '1.0'\n+D0872 Extract OS            00 (0) 'MS-DOS'\n+D0873 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D02F7 Compression Method    0000 (0) 'Stored'\n-D02F9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D02FD CRC                   00000000 (0)\n-D0301 Compressed Size       00000000 (0)\n-D0305 Uncompressed Size     00000000 (0)\n-D0309 Filename Length       0063 (99)\n-D030B Extra Length          0000 (0)\n-D030D Comment Length        0000 (0)\n-D030F Disk Start            0000 (0)\n-D0311 Int File Attributes   0000 (0)\n+D0875 Compression Method    0000 (0) 'Stored'\n+D0877 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D087B CRC                   00000000 (0)\n+D087F Compressed Size       00000000 (0)\n+D0883 Uncompressed Size     00000000 (0)\n+D0887 Filename Length       0063 (99)\n+D0889 Extra Length          0000 (0)\n+D088B Comment Length        0000 (0)\n+D088D Disk Start            0000 (0)\n+D088F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0313 Ext File Attributes   41ED0010 (1106051088)\n+D0891 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0317 Local Header Offset   00005B19 (23321)\n-D031B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0895 Local Header Offset   00005B19 (23321)\n+D0899 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD031B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0899: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD031B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0899: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD02F3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0871: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D037E CENTRAL HEADER #209   02014B50 (33639248)\n-D0382 Created Zip Spec      14 (20) '2.0'\n-D0383 Created OS            03 (3) 'Unix'\n-D0384 Extract Zip Spec      0A (10) '1.0'\n-D0385 Extract OS            00 (0) 'MS-DOS'\n-D0386 General Purpose Flag  0800 (2048)\n+D08FC CENTRAL HEADER #209   02014B50 (33639248)\n+D0900 Created Zip Spec      14 (20) '2.0'\n+D0901 Created OS            03 (3) 'Unix'\n+D0902 Extract Zip Spec      0A (10) '1.0'\n+D0903 Extract OS            00 (0) 'MS-DOS'\n+D0904 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0388 Compression Method    0000 (0) 'Stored'\n-D038A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D038E CRC                   00000000 (0)\n-D0392 Compressed Size       00000000 (0)\n-D0396 Uncompressed Size     00000000 (0)\n-D039A Filename Length       005C (92)\n-D039C Extra Length          0000 (0)\n-D039E Comment Length        0000 (0)\n-D03A0 Disk Start            0000 (0)\n-D03A2 Int File Attributes   0000 (0)\n+D0906 Compression Method    0000 (0) 'Stored'\n+D0908 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D090C CRC                   00000000 (0)\n+D0910 Compressed Size       00000000 (0)\n+D0914 Uncompressed Size     00000000 (0)\n+D0918 Filename Length       005C (92)\n+D091A Extra Length          0000 (0)\n+D091C Comment Length        0000 (0)\n+D091E Disk Start            0000 (0)\n+D0920 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D03A4 Ext File Attributes   41ED0010 (1106051088)\n+D0922 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D03A8 Local Header Offset   00005B9A (23450)\n-D03AC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0926 Local Header Offset   00005B9A (23450)\n+D092A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD03AC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD092A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD03AC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD092A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0384: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0902: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0408 CENTRAL HEADER #210   02014B50 (33639248)\n-D040C Created Zip Spec      14 (20) '2.0'\n-D040D Created OS            03 (3) 'Unix'\n-D040E Extract Zip Spec      0A (10) '1.0'\n-D040F Extract OS            00 (0) 'MS-DOS'\n-D0410 General Purpose Flag  0800 (2048)\n+D0986 CENTRAL HEADER #210   02014B50 (33639248)\n+D098A Created Zip Spec      14 (20) '2.0'\n+D098B Created OS            03 (3) 'Unix'\n+D098C Extract Zip Spec      0A (10) '1.0'\n+D098D Extract OS            00 (0) 'MS-DOS'\n+D098E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0412 Compression Method    0000 (0) 'Stored'\n-D0414 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0418 CRC                   00000000 (0)\n-D041C Compressed Size       00000000 (0)\n-D0420 Uncompressed Size     00000000 (0)\n-D0424 Filename Length       005D (93)\n-D0426 Extra Length          0000 (0)\n-D0428 Comment Length        0000 (0)\n-D042A Disk Start            0000 (0)\n-D042C Int File Attributes   0000 (0)\n+D0990 Compression Method    0000 (0) 'Stored'\n+D0992 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0996 CRC                   00000000 (0)\n+D099A Compressed Size       00000000 (0)\n+D099E Uncompressed Size     00000000 (0)\n+D09A2 Filename Length       005D (93)\n+D09A4 Extra Length          0000 (0)\n+D09A6 Comment Length        0000 (0)\n+D09A8 Disk Start            0000 (0)\n+D09AA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D042E Ext File Attributes   41ED0010 (1106051088)\n+D09AC Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0432 Local Header Offset   00005C14 (23572)\n-D0436 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D09B0 Local Header Offset   00005C14 (23572)\n+D09B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0436: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD09B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0436: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD09B4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD040E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD098C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0493 CENTRAL HEADER #211   02014B50 (33639248)\n-D0497 Created Zip Spec      14 (20) '2.0'\n-D0498 Created OS            03 (3) 'Unix'\n-D0499 Extract Zip Spec      0A (10) '1.0'\n-D049A Extract OS            00 (0) 'MS-DOS'\n-D049B General Purpose Flag  0800 (2048)\n+D0A11 CENTRAL HEADER #211   02014B50 (33639248)\n+D0A15 Created Zip Spec      14 (20) '2.0'\n+D0A16 Created OS            03 (3) 'Unix'\n+D0A17 Extract Zip Spec      0A (10) '1.0'\n+D0A18 Extract OS            00 (0) 'MS-DOS'\n+D0A19 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D049D Compression Method    0000 (0) 'Stored'\n-D049F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D04A3 CRC                   00000000 (0)\n-D04A7 Compressed Size       00000000 (0)\n-D04AB Uncompressed Size     00000000 (0)\n-D04AF Filename Length       005D (93)\n-D04B1 Extra Length          0000 (0)\n-D04B3 Comment Length        0000 (0)\n-D04B5 Disk Start            0000 (0)\n-D04B7 Int File Attributes   0000 (0)\n+D0A1B Compression Method    0000 (0) 'Stored'\n+D0A1D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0A21 CRC                   00000000 (0)\n+D0A25 Compressed Size       00000000 (0)\n+D0A29 Uncompressed Size     00000000 (0)\n+D0A2D Filename Length       005D (93)\n+D0A2F Extra Length          0000 (0)\n+D0A31 Comment Length        0000 (0)\n+D0A33 Disk Start            0000 (0)\n+D0A35 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D04B9 Ext File Attributes   41ED0010 (1106051088)\n+D0A37 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D04BD Local Header Offset   00005C8F (23695)\n-D04C1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0A3B Local Header Offset   00005C8F (23695)\n+D0A3F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD04C1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0A3F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD04C1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0A3F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0499: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0A17: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D051E CENTRAL HEADER #212   02014B50 (33639248)\n-D0522 Created Zip Spec      14 (20) '2.0'\n-D0523 Created OS            03 (3) 'Unix'\n-D0524 Extract Zip Spec      0A (10) '1.0'\n-D0525 Extract OS            00 (0) 'MS-DOS'\n-D0526 General Purpose Flag  0800 (2048)\n+D0A9C CENTRAL HEADER #212   02014B50 (33639248)\n+D0AA0 Created Zip Spec      14 (20) '2.0'\n+D0AA1 Created OS            03 (3) 'Unix'\n+D0AA2 Extract Zip Spec      0A (10) '1.0'\n+D0AA3 Extract OS            00 (0) 'MS-DOS'\n+D0AA4 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0528 Compression Method    0000 (0) 'Stored'\n-D052A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D052E CRC                   00000000 (0)\n-D0532 Compressed Size       00000000 (0)\n-D0536 Uncompressed Size     00000000 (0)\n-D053A Filename Length       005E (94)\n-D053C Extra Length          0000 (0)\n-D053E Comment Length        0000 (0)\n-D0540 Disk Start            0000 (0)\n-D0542 Int File Attributes   0000 (0)\n+D0AA6 Compression Method    0000 (0) 'Stored'\n+D0AA8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0AAC CRC                   00000000 (0)\n+D0AB0 Compressed Size       00000000 (0)\n+D0AB4 Uncompressed Size     00000000 (0)\n+D0AB8 Filename Length       005E (94)\n+D0ABA Extra Length          0000 (0)\n+D0ABC Comment Length        0000 (0)\n+D0ABE Disk Start            0000 (0)\n+D0AC0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0544 Ext File Attributes   41ED0010 (1106051088)\n+D0AC2 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0548 Local Header Offset   00005D0A (23818)\n-D054C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0AC6 Local Header Offset   00005D0A (23818)\n+D0ACA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD054C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0ACA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD054C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0ACA: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0524: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0AA2: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D05AA CENTRAL HEADER #213   02014B50 (33639248)\n-D05AE Created Zip Spec      14 (20) '2.0'\n-D05AF Created OS            03 (3) 'Unix'\n-D05B0 Extract Zip Spec      0A (10) '1.0'\n-D05B1 Extract OS            00 (0) 'MS-DOS'\n-D05B2 General Purpose Flag  0800 (2048)\n+D0B28 CENTRAL HEADER #213   02014B50 (33639248)\n+D0B2C Created Zip Spec      14 (20) '2.0'\n+D0B2D Created OS            03 (3) 'Unix'\n+D0B2E Extract Zip Spec      0A (10) '1.0'\n+D0B2F Extract OS            00 (0) 'MS-DOS'\n+D0B30 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D05B4 Compression Method    0000 (0) 'Stored'\n-D05B6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D05BA CRC                   00000000 (0)\n-D05BE Compressed Size       00000000 (0)\n-D05C2 Uncompressed Size     00000000 (0)\n-D05C6 Filename Length       0061 (97)\n-D05C8 Extra Length          0000 (0)\n-D05CA Comment Length        0000 (0)\n-D05CC Disk Start            0000 (0)\n-D05CE Int File Attributes   0000 (0)\n+D0B32 Compression Method    0000 (0) 'Stored'\n+D0B34 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0B38 CRC                   00000000 (0)\n+D0B3C Compressed Size       00000000 (0)\n+D0B40 Uncompressed Size     00000000 (0)\n+D0B44 Filename Length       0061 (97)\n+D0B46 Extra Length          0000 (0)\n+D0B48 Comment Length        0000 (0)\n+D0B4A Disk Start            0000 (0)\n+D0B4C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D05D0 Ext File Attributes   41ED0010 (1106051088)\n+D0B4E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D05D4 Local Header Offset   00005D86 (23942)\n-D05D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0B52 Local Header Offset   00005D86 (23942)\n+D0B56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD05D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0B56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD05D8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0B56: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD05B0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0B2E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0639 CENTRAL HEADER #214   02014B50 (33639248)\n-D063D Created Zip Spec      14 (20) '2.0'\n-D063E Created OS            03 (3) 'Unix'\n-D063F Extract Zip Spec      0A (10) '1.0'\n-D0640 Extract OS            00 (0) 'MS-DOS'\n-D0641 General Purpose Flag  0800 (2048)\n+D0BB7 CENTRAL HEADER #214   02014B50 (33639248)\n+D0BBB Created Zip Spec      14 (20) '2.0'\n+D0BBC Created OS            03 (3) 'Unix'\n+D0BBD Extract Zip Spec      0A (10) '1.0'\n+D0BBE Extract OS            00 (0) 'MS-DOS'\n+D0BBF General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0643 Compression Method    0000 (0) 'Stored'\n-D0645 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0649 CRC                   00000000 (0)\n-D064D Compressed Size       00000000 (0)\n-D0651 Uncompressed Size     00000000 (0)\n-D0655 Filename Length       0061 (97)\n-D0657 Extra Length          0000 (0)\n-D0659 Comment Length        0000 (0)\n-D065B Disk Start            0000 (0)\n-D065D Int File Attributes   0000 (0)\n+D0BC1 Compression Method    0000 (0) 'Stored'\n+D0BC3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0BC7 CRC                   00000000 (0)\n+D0BCB Compressed Size       00000000 (0)\n+D0BCF Uncompressed Size     00000000 (0)\n+D0BD3 Filename Length       0061 (97)\n+D0BD5 Extra Length          0000 (0)\n+D0BD7 Comment Length        0000 (0)\n+D0BD9 Disk Start            0000 (0)\n+D0BDB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D065F Ext File Attributes   41ED0010 (1106051088)\n+D0BDD Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0663 Local Header Offset   00005E05 (24069)\n-D0667 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0BE1 Local Header Offset   00005E05 (24069)\n+D0BE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0667: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0BE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0667: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0BE5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD063F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0BBD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D06C8 CENTRAL HEADER #215   02014B50 (33639248)\n-D06CC Created Zip Spec      14 (20) '2.0'\n-D06CD Created OS            03 (3) 'Unix'\n-D06CE Extract Zip Spec      0A (10) '1.0'\n-D06CF Extract OS            00 (0) 'MS-DOS'\n-D06D0 General Purpose Flag  0800 (2048)\n+D0C46 CENTRAL HEADER #215   02014B50 (33639248)\n+D0C4A Created Zip Spec      14 (20) '2.0'\n+D0C4B Created OS            03 (3) 'Unix'\n+D0C4C Extract Zip Spec      0A (10) '1.0'\n+D0C4D Extract OS            00 (0) 'MS-DOS'\n+D0C4E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D06D2 Compression Method    0000 (0) 'Stored'\n-D06D4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D06D8 CRC                   00000000 (0)\n-D06DC Compressed Size       00000000 (0)\n-D06E0 Uncompressed Size     00000000 (0)\n-D06E4 Filename Length       0060 (96)\n-D06E6 Extra Length          0000 (0)\n-D06E8 Comment Length        0000 (0)\n-D06EA Disk Start            0000 (0)\n-D06EC Int File Attributes   0000 (0)\n+D0C50 Compression Method    0000 (0) 'Stored'\n+D0C52 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0C56 CRC                   00000000 (0)\n+D0C5A Compressed Size       00000000 (0)\n+D0C5E Uncompressed Size     00000000 (0)\n+D0C62 Filename Length       0060 (96)\n+D0C64 Extra Length          0000 (0)\n+D0C66 Comment Length        0000 (0)\n+D0C68 Disk Start            0000 (0)\n+D0C6A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D06EE Ext File Attributes   41ED0010 (1106051088)\n+D0C6C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D06F2 Local Header Offset   00005E84 (24196)\n-D06F6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0C70 Local Header Offset   00005E84 (24196)\n+D0C74 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD06F6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0C74: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD06F6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0C74: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD06CE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0C4C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0756 CENTRAL HEADER #216   02014B50 (33639248)\n-D075A Created Zip Spec      14 (20) '2.0'\n-D075B Created OS            03 (3) 'Unix'\n-D075C Extract Zip Spec      0A (10) '1.0'\n-D075D Extract OS            00 (0) 'MS-DOS'\n-D075E General Purpose Flag  0800 (2048)\n+D0CD4 CENTRAL HEADER #216   02014B50 (33639248)\n+D0CD8 Created Zip Spec      14 (20) '2.0'\n+D0CD9 Created OS            03 (3) 'Unix'\n+D0CDA Extract Zip Spec      0A (10) '1.0'\n+D0CDB Extract OS            00 (0) 'MS-DOS'\n+D0CDC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0760 Compression Method    0000 (0) 'Stored'\n-D0762 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0766 CRC                   00000000 (0)\n-D076A Compressed Size       00000000 (0)\n-D076E Uncompressed Size     00000000 (0)\n-D0772 Filename Length       0064 (100)\n-D0774 Extra Length          0000 (0)\n-D0776 Comment Length        0000 (0)\n-D0778 Disk Start            0000 (0)\n-D077A Int File Attributes   0000 (0)\n+D0CDE Compression Method    0000 (0) 'Stored'\n+D0CE0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0CE4 CRC                   00000000 (0)\n+D0CE8 Compressed Size       00000000 (0)\n+D0CEC Uncompressed Size     00000000 (0)\n+D0CF0 Filename Length       0064 (100)\n+D0CF2 Extra Length          0000 (0)\n+D0CF4 Comment Length        0000 (0)\n+D0CF6 Disk Start            0000 (0)\n+D0CF8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D077C Ext File Attributes   41ED0010 (1106051088)\n+D0CFA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0780 Local Header Offset   00005F02 (24322)\n-D0784 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0CFE Local Header Offset   00005F02 (24322)\n+D0D02 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0784: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0D02: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0784: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0D02: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD075C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0CDA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D07E8 CENTRAL HEADER #217   02014B50 (33639248)\n-D07EC Created Zip Spec      14 (20) '2.0'\n-D07ED Created OS            03 (3) 'Unix'\n-D07EE Extract Zip Spec      0A (10) '1.0'\n-D07EF Extract OS            00 (0) 'MS-DOS'\n-D07F0 General Purpose Flag  0800 (2048)\n+D0D66 CENTRAL HEADER #217   02014B50 (33639248)\n+D0D6A Created Zip Spec      14 (20) '2.0'\n+D0D6B Created OS            03 (3) 'Unix'\n+D0D6C Extract Zip Spec      0A (10) '1.0'\n+D0D6D Extract OS            00 (0) 'MS-DOS'\n+D0D6E General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D07F2 Compression Method    0000 (0) 'Stored'\n-D07F4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D07F8 CRC                   00000000 (0)\n-D07FC Compressed Size       00000000 (0)\n-D0800 Uncompressed Size     00000000 (0)\n-D0804 Filename Length       005D (93)\n-D0806 Extra Length          0000 (0)\n-D0808 Comment Length        0000 (0)\n-D080A Disk Start            0000 (0)\n-D080C Int File Attributes   0000 (0)\n+D0D70 Compression Method    0000 (0) 'Stored'\n+D0D72 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0D76 CRC                   00000000 (0)\n+D0D7A Compressed Size       00000000 (0)\n+D0D7E Uncompressed Size     00000000 (0)\n+D0D82 Filename Length       005D (93)\n+D0D84 Extra Length          0000 (0)\n+D0D86 Comment Length        0000 (0)\n+D0D88 Disk Start            0000 (0)\n+D0D8A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D080E Ext File Attributes   41ED0010 (1106051088)\n+D0D8C Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0812 Local Header Offset   00005F84 (24452)\n-D0816 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0D90 Local Header Offset   00005F84 (24452)\n+D0D94 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0816: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0D94: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0816: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0D94: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD07EE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0D6C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0873 CENTRAL HEADER #218   02014B50 (33639248)\n-D0877 Created Zip Spec      14 (20) '2.0'\n-D0878 Created OS            03 (3) 'Unix'\n-D0879 Extract Zip Spec      0A (10) '1.0'\n-D087A Extract OS            00 (0) 'MS-DOS'\n-D087B General Purpose Flag  0800 (2048)\n+D0DF1 CENTRAL HEADER #218   02014B50 (33639248)\n+D0DF5 Created Zip Spec      14 (20) '2.0'\n+D0DF6 Created OS            03 (3) 'Unix'\n+D0DF7 Extract Zip Spec      0A (10) '1.0'\n+D0DF8 Extract OS            00 (0) 'MS-DOS'\n+D0DF9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D087D Compression Method    0000 (0) 'Stored'\n-D087F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0883 CRC                   00000000 (0)\n-D0887 Compressed Size       00000000 (0)\n-D088B Uncompressed Size     00000000 (0)\n-D088F Filename Length       0060 (96)\n-D0891 Extra Length          0000 (0)\n-D0893 Comment Length        0000 (0)\n-D0895 Disk Start            0000 (0)\n-D0897 Int File Attributes   0000 (0)\n+D0DFB Compression Method    0000 (0) 'Stored'\n+D0DFD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0E01 CRC                   00000000 (0)\n+D0E05 Compressed Size       00000000 (0)\n+D0E09 Uncompressed Size     00000000 (0)\n+D0E0D Filename Length       0060 (96)\n+D0E0F Extra Length          0000 (0)\n+D0E11 Comment Length        0000 (0)\n+D0E13 Disk Start            0000 (0)\n+D0E15 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0899 Ext File Attributes   41ED0010 (1106051088)\n+D0E17 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D089D Local Header Offset   00005FFF (24575)\n-D08A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0E1B Local Header Offset   00005FFF (24575)\n+D0E1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD08A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0E1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD08A1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0E1F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0879: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0DF7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0901 CENTRAL HEADER #219   02014B50 (33639248)\n-D0905 Created Zip Spec      14 (20) '2.0'\n-D0906 Created OS            03 (3) 'Unix'\n-D0907 Extract Zip Spec      0A (10) '1.0'\n-D0908 Extract OS            00 (0) 'MS-DOS'\n-D0909 General Purpose Flag  0800 (2048)\n+D0E7F CENTRAL HEADER #219   02014B50 (33639248)\n+D0E83 Created Zip Spec      14 (20) '2.0'\n+D0E84 Created OS            03 (3) 'Unix'\n+D0E85 Extract Zip Spec      0A (10) '1.0'\n+D0E86 Extract OS            00 (0) 'MS-DOS'\n+D0E87 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D090B Compression Method    0000 (0) 'Stored'\n-D090D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0911 CRC                   00000000 (0)\n-D0915 Compressed Size       00000000 (0)\n-D0919 Uncompressed Size     00000000 (0)\n-D091D Filename Length       0066 (102)\n-D091F Extra Length          0000 (0)\n-D0921 Comment Length        0000 (0)\n-D0923 Disk Start            0000 (0)\n-D0925 Int File Attributes   0000 (0)\n+D0E89 Compression Method    0000 (0) 'Stored'\n+D0E8B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0E8F CRC                   00000000 (0)\n+D0E93 Compressed Size       00000000 (0)\n+D0E97 Uncompressed Size     00000000 (0)\n+D0E9B Filename Length       0066 (102)\n+D0E9D Extra Length          0000 (0)\n+D0E9F Comment Length        0000 (0)\n+D0EA1 Disk Start            0000 (0)\n+D0EA3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0927 Ext File Attributes   41ED0010 (1106051088)\n+D0EA5 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D092B Local Header Offset   0000607D (24701)\n-D092F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0EA9 Local Header Offset   0000607D (24701)\n+D0EAD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD092F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0EAD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD092F: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0EAD: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0907: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0E85: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0995 CENTRAL HEADER #220   02014B50 (33639248)\n-D0999 Created Zip Spec      14 (20) '2.0'\n-D099A Created OS            03 (3) 'Unix'\n-D099B Extract Zip Spec      0A (10) '1.0'\n-D099C Extract OS            00 (0) 'MS-DOS'\n-D099D General Purpose Flag  0800 (2048)\n+D0F13 CENTRAL HEADER #220   02014B50 (33639248)\n+D0F17 Created Zip Spec      14 (20) '2.0'\n+D0F18 Created OS            03 (3) 'Unix'\n+D0F19 Extract Zip Spec      0A (10) '1.0'\n+D0F1A Extract OS            00 (0) 'MS-DOS'\n+D0F1B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D099F Compression Method    0000 (0) 'Stored'\n-D09A1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D09A5 CRC                   00000000 (0)\n-D09A9 Compressed Size       00000000 (0)\n-D09AD Uncompressed Size     00000000 (0)\n-D09B1 Filename Length       0065 (101)\n-D09B3 Extra Length          0000 (0)\n-D09B5 Comment Length        0000 (0)\n-D09B7 Disk Start            0000 (0)\n-D09B9 Int File Attributes   0000 (0)\n+D0F1D Compression Method    0000 (0) 'Stored'\n+D0F1F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0F23 CRC                   00000000 (0)\n+D0F27 Compressed Size       00000000 (0)\n+D0F2B Uncompressed Size     00000000 (0)\n+D0F2F Filename Length       0065 (101)\n+D0F31 Extra Length          0000 (0)\n+D0F33 Comment Length        0000 (0)\n+D0F35 Disk Start            0000 (0)\n+D0F37 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D09BB Ext File Attributes   41ED0010 (1106051088)\n+D0F39 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D09BF Local Header Offset   00006101 (24833)\n-D09C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0F3D Local Header Offset   00006101 (24833)\n+D0F41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD09C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0F41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD09C3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0F41: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD099B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0F19: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0A28 CENTRAL HEADER #221   02014B50 (33639248)\n-D0A2C Created Zip Spec      14 (20) '2.0'\n-D0A2D Created OS            03 (3) 'Unix'\n-D0A2E Extract Zip Spec      0A (10) '1.0'\n-D0A2F Extract OS            00 (0) 'MS-DOS'\n-D0A30 General Purpose Flag  0800 (2048)\n+D0FA6 CENTRAL HEADER #221   02014B50 (33639248)\n+D0FAA Created Zip Spec      14 (20) '2.0'\n+D0FAB Created OS            03 (3) 'Unix'\n+D0FAC Extract Zip Spec      0A (10) '1.0'\n+D0FAD Extract OS            00 (0) 'MS-DOS'\n+D0FAE General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0A32 Compression Method    0000 (0) 'Stored'\n-D0A34 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0A38 CRC                   00000000 (0)\n-D0A3C Compressed Size       00000000 (0)\n-D0A40 Uncompressed Size     00000000 (0)\n-D0A44 Filename Length       0061 (97)\n-D0A46 Extra Length          0000 (0)\n-D0A48 Comment Length        0000 (0)\n-D0A4A Disk Start            0000 (0)\n-D0A4C Int File Attributes   0000 (0)\n+D0FB0 Compression Method    0000 (0) 'Stored'\n+D0FB2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D0FB6 CRC                   00000000 (0)\n+D0FBA Compressed Size       00000000 (0)\n+D0FBE Uncompressed Size     00000000 (0)\n+D0FC2 Filename Length       0061 (97)\n+D0FC4 Extra Length          0000 (0)\n+D0FC6 Comment Length        0000 (0)\n+D0FC8 Disk Start            0000 (0)\n+D0FCA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0A4E Ext File Attributes   41ED0010 (1106051088)\n+D0FCC Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0A52 Local Header Offset   00006184 (24964)\n-D0A56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D0FD0 Local Header Offset   00006184 (24964)\n+D0FD4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0A56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0FD4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0A56: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD0FD4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0A2E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD0FAC: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0AB7 CENTRAL HEADER #222   02014B50 (33639248)\n-D0ABB Created Zip Spec      14 (20) '2.0'\n-D0ABC Created OS            03 (3) 'Unix'\n-D0ABD Extract Zip Spec      0A (10) '1.0'\n-D0ABE Extract OS            00 (0) 'MS-DOS'\n-D0ABF General Purpose Flag  0800 (2048)\n+D1035 CENTRAL HEADER #222   02014B50 (33639248)\n+D1039 Created Zip Spec      14 (20) '2.0'\n+D103A Created OS            03 (3) 'Unix'\n+D103B Extract Zip Spec      0A (10) '1.0'\n+D103C Extract OS            00 (0) 'MS-DOS'\n+D103D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0AC1 Compression Method    0000 (0) 'Stored'\n-D0AC3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0AC7 CRC                   00000000 (0)\n-D0ACB Compressed Size       00000000 (0)\n-D0ACF Uncompressed Size     00000000 (0)\n-D0AD3 Filename Length       005D (93)\n-D0AD5 Extra Length          0000 (0)\n-D0AD7 Comment Length        0000 (0)\n-D0AD9 Disk Start            0000 (0)\n-D0ADB Int File Attributes   0000 (0)\n+D103F Compression Method    0000 (0) 'Stored'\n+D1041 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1045 CRC                   00000000 (0)\n+D1049 Compressed Size       00000000 (0)\n+D104D Uncompressed Size     00000000 (0)\n+D1051 Filename Length       005D (93)\n+D1053 Extra Length          0000 (0)\n+D1055 Comment Length        0000 (0)\n+D1057 Disk Start            0000 (0)\n+D1059 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0ADD Ext File Attributes   41ED0010 (1106051088)\n+D105B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0AE1 Local Header Offset   00006203 (25091)\n-D0AE5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D105F Local Header Offset   00006203 (25091)\n+D1063 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0AE5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1063: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0AE5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1063: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0ABD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD103B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0B42 CENTRAL HEADER #223   02014B50 (33639248)\n-D0B46 Created Zip Spec      14 (20) '2.0'\n-D0B47 Created OS            03 (3) 'Unix'\n-D0B48 Extract Zip Spec      0A (10) '1.0'\n-D0B49 Extract OS            00 (0) 'MS-DOS'\n-D0B4A General Purpose Flag  0800 (2048)\n+D10C0 CENTRAL HEADER #223   02014B50 (33639248)\n+D10C4 Created Zip Spec      14 (20) '2.0'\n+D10C5 Created OS            03 (3) 'Unix'\n+D10C6 Extract Zip Spec      0A (10) '1.0'\n+D10C7 Extract OS            00 (0) 'MS-DOS'\n+D10C8 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0B4C Compression Method    0000 (0) 'Stored'\n-D0B4E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0B52 CRC                   00000000 (0)\n-D0B56 Compressed Size       00000000 (0)\n-D0B5A Uncompressed Size     00000000 (0)\n-D0B5E Filename Length       0061 (97)\n-D0B60 Extra Length          0000 (0)\n-D0B62 Comment Length        0000 (0)\n-D0B64 Disk Start            0000 (0)\n-D0B66 Int File Attributes   0000 (0)\n+D10CA Compression Method    0000 (0) 'Stored'\n+D10CC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D10D0 CRC                   00000000 (0)\n+D10D4 Compressed Size       00000000 (0)\n+D10D8 Uncompressed Size     00000000 (0)\n+D10DC Filename Length       0061 (97)\n+D10DE Extra Length          0000 (0)\n+D10E0 Comment Length        0000 (0)\n+D10E2 Disk Start            0000 (0)\n+D10E4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0B68 Ext File Attributes   41ED0010 (1106051088)\n+D10E6 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0B6C Local Header Offset   0000627E (25214)\n-D0B70 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D10EA Local Header Offset   0000627E (25214)\n+D10EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0B70: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD10EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0B70: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD10EE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0B48: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD10C6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0BD1 CENTRAL HEADER #224   02014B50 (33639248)\n-D0BD5 Created Zip Spec      14 (20) '2.0'\n-D0BD6 Created OS            03 (3) 'Unix'\n-D0BD7 Extract Zip Spec      0A (10) '1.0'\n-D0BD8 Extract OS            00 (0) 'MS-DOS'\n-D0BD9 General Purpose Flag  0800 (2048)\n+D114F CENTRAL HEADER #224   02014B50 (33639248)\n+D1153 Created Zip Spec      14 (20) '2.0'\n+D1154 Created OS            03 (3) 'Unix'\n+D1155 Extract Zip Spec      0A (10) '1.0'\n+D1156 Extract OS            00 (0) 'MS-DOS'\n+D1157 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0BDB Compression Method    0000 (0) 'Stored'\n-D0BDD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0BE1 CRC                   00000000 (0)\n-D0BE5 Compressed Size       00000000 (0)\n-D0BE9 Uncompressed Size     00000000 (0)\n-D0BED Filename Length       0060 (96)\n-D0BEF Extra Length          0000 (0)\n-D0BF1 Comment Length        0000 (0)\n-D0BF3 Disk Start            0000 (0)\n-D0BF5 Int File Attributes   0000 (0)\n+D1159 Compression Method    0000 (0) 'Stored'\n+D115B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D115F CRC                   00000000 (0)\n+D1163 Compressed Size       00000000 (0)\n+D1167 Uncompressed Size     00000000 (0)\n+D116B Filename Length       0060 (96)\n+D116D Extra Length          0000 (0)\n+D116F Comment Length        0000 (0)\n+D1171 Disk Start            0000 (0)\n+D1173 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0BF7 Ext File Attributes   41ED0010 (1106051088)\n+D1175 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0BFB Local Header Offset   000062FD (25341)\n-D0BFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1179 Local Header Offset   000062FD (25341)\n+D117D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0BFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD117D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0BFF: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD117D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0BD7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1155: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0C5F CENTRAL HEADER #225   02014B50 (33639248)\n-D0C63 Created Zip Spec      14 (20) '2.0'\n-D0C64 Created OS            03 (3) 'Unix'\n-D0C65 Extract Zip Spec      0A (10) '1.0'\n-D0C66 Extract OS            00 (0) 'MS-DOS'\n-D0C67 General Purpose Flag  0800 (2048)\n+D11DD CENTRAL HEADER #225   02014B50 (33639248)\n+D11E1 Created Zip Spec      14 (20) '2.0'\n+D11E2 Created OS            03 (3) 'Unix'\n+D11E3 Extract Zip Spec      0A (10) '1.0'\n+D11E4 Extract OS            00 (0) 'MS-DOS'\n+D11E5 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0C69 Compression Method    0000 (0) 'Stored'\n-D0C6B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0C6F CRC                   00000000 (0)\n-D0C73 Compressed Size       00000000 (0)\n-D0C77 Uncompressed Size     00000000 (0)\n-D0C7B Filename Length       0063 (99)\n-D0C7D Extra Length          0000 (0)\n-D0C7F Comment Length        0000 (0)\n-D0C81 Disk Start            0000 (0)\n-D0C83 Int File Attributes   0000 (0)\n+D11E7 Compression Method    0000 (0) 'Stored'\n+D11E9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D11ED CRC                   00000000 (0)\n+D11F1 Compressed Size       00000000 (0)\n+D11F5 Uncompressed Size     00000000 (0)\n+D11F9 Filename Length       0063 (99)\n+D11FB Extra Length          0000 (0)\n+D11FD Comment Length        0000 (0)\n+D11FF Disk Start            0000 (0)\n+D1201 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0C85 Ext File Attributes   41ED0010 (1106051088)\n+D1203 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0C89 Local Header Offset   0000637B (25467)\n-D0C8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1207 Local Header Offset   0000637B (25467)\n+D120B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0C8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD120B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0C8D: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD120B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0C65: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD11E3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0CF0 CENTRAL HEADER #226   02014B50 (33639248)\n-D0CF4 Created Zip Spec      14 (20) '2.0'\n-D0CF5 Created OS            03 (3) 'Unix'\n-D0CF6 Extract Zip Spec      0A (10) '1.0'\n-D0CF7 Extract OS            00 (0) 'MS-DOS'\n-D0CF8 General Purpose Flag  0800 (2048)\n+D126E CENTRAL HEADER #226   02014B50 (33639248)\n+D1272 Created Zip Spec      14 (20) '2.0'\n+D1273 Created OS            03 (3) 'Unix'\n+D1274 Extract Zip Spec      0A (10) '1.0'\n+D1275 Extract OS            00 (0) 'MS-DOS'\n+D1276 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0CFA Compression Method    0000 (0) 'Stored'\n-D0CFC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0D00 CRC                   00000000 (0)\n-D0D04 Compressed Size       00000000 (0)\n-D0D08 Uncompressed Size     00000000 (0)\n-D0D0C Filename Length       0060 (96)\n-D0D0E Extra Length          0000 (0)\n-D0D10 Comment Length        0000 (0)\n-D0D12 Disk Start            0000 (0)\n-D0D14 Int File Attributes   0000 (0)\n+D1278 Compression Method    0000 (0) 'Stored'\n+D127A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D127E CRC                   00000000 (0)\n+D1282 Compressed Size       00000000 (0)\n+D1286 Uncompressed Size     00000000 (0)\n+D128A Filename Length       0060 (96)\n+D128C Extra Length          0000 (0)\n+D128E Comment Length        0000 (0)\n+D1290 Disk Start            0000 (0)\n+D1292 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0D16 Ext File Attributes   41ED0010 (1106051088)\n+D1294 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0D1A Local Header Offset   000063FC (25596)\n-D0D1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1298 Local Header Offset   000063FC (25596)\n+D129C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0D1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD129C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0D1E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD129C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0CF6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1274: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0D7E CENTRAL HEADER #227   02014B50 (33639248)\n-D0D82 Created Zip Spec      14 (20) '2.0'\n-D0D83 Created OS            03 (3) 'Unix'\n-D0D84 Extract Zip Spec      0A (10) '1.0'\n-D0D85 Extract OS            00 (0) 'MS-DOS'\n-D0D86 General Purpose Flag  0800 (2048)\n+D12FC CENTRAL HEADER #227   02014B50 (33639248)\n+D1300 Created Zip Spec      14 (20) '2.0'\n+D1301 Created OS            03 (3) 'Unix'\n+D1302 Extract Zip Spec      0A (10) '1.0'\n+D1303 Extract OS            00 (0) 'MS-DOS'\n+D1304 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0D88 Compression Method    0000 (0) 'Stored'\n-D0D8A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0D8E CRC                   00000000 (0)\n-D0D92 Compressed Size       00000000 (0)\n-D0D96 Uncompressed Size     00000000 (0)\n-D0D9A Filename Length       0059 (89)\n-D0D9C Extra Length          0000 (0)\n-D0D9E Comment Length        0000 (0)\n-D0DA0 Disk Start            0000 (0)\n-D0DA2 Int File Attributes   0000 (0)\n+D1306 Compression Method    0000 (0) 'Stored'\n+D1308 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D130C CRC                   00000000 (0)\n+D1310 Compressed Size       00000000 (0)\n+D1314 Uncompressed Size     00000000 (0)\n+D1318 Filename Length       0059 (89)\n+D131A Extra Length          0000 (0)\n+D131C Comment Length        0000 (0)\n+D131E Disk Start            0000 (0)\n+D1320 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0DA4 Ext File Attributes   41ED0010 (1106051088)\n+D1322 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0DA8 Local Header Offset   0000647A (25722)\n-D0DAC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1326 Local Header Offset   0000647A (25722)\n+D132A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0DAC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD132A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0DAC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD132A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0D84: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1302: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0E05 CENTRAL HEADER #228   02014B50 (33639248)\n-D0E09 Created Zip Spec      14 (20) '2.0'\n-D0E0A Created OS            03 (3) 'Unix'\n-D0E0B Extract Zip Spec      0A (10) '1.0'\n-D0E0C Extract OS            00 (0) 'MS-DOS'\n-D0E0D General Purpose Flag  0800 (2048)\n+D1383 CENTRAL HEADER #228   02014B50 (33639248)\n+D1387 Created Zip Spec      14 (20) '2.0'\n+D1388 Created OS            03 (3) 'Unix'\n+D1389 Extract Zip Spec      0A (10) '1.0'\n+D138A Extract OS            00 (0) 'MS-DOS'\n+D138B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0E0F Compression Method    0000 (0) 'Stored'\n-D0E11 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0E15 CRC                   00000000 (0)\n-D0E19 Compressed Size       00000000 (0)\n-D0E1D Uncompressed Size     00000000 (0)\n-D0E21 Filename Length       006A (106)\n-D0E23 Extra Length          0000 (0)\n-D0E25 Comment Length        0000 (0)\n-D0E27 Disk Start            0000 (0)\n-D0E29 Int File Attributes   0000 (0)\n+D138D Compression Method    0000 (0) 'Stored'\n+D138F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1393 CRC                   00000000 (0)\n+D1397 Compressed Size       00000000 (0)\n+D139B Uncompressed Size     00000000 (0)\n+D139F Filename Length       006A (106)\n+D13A1 Extra Length          0000 (0)\n+D13A3 Comment Length        0000 (0)\n+D13A5 Disk Start            0000 (0)\n+D13A7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0E2B Ext File Attributes   41ED0010 (1106051088)\n+D13A9 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0E2F Local Header Offset   000064F1 (25841)\n-D0E33 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D13AD Local Header Offset   000064F1 (25841)\n+D13B1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0E33: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD13B1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0E33: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD13B1: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0E0B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1389: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0E9D CENTRAL HEADER #229   02014B50 (33639248)\n-D0EA1 Created Zip Spec      14 (20) '2.0'\n-D0EA2 Created OS            03 (3) 'Unix'\n-D0EA3 Extract Zip Spec      0A (10) '1.0'\n-D0EA4 Extract OS            00 (0) 'MS-DOS'\n-D0EA5 General Purpose Flag  0800 (2048)\n+D141B CENTRAL HEADER #229   02014B50 (33639248)\n+D141F Created Zip Spec      14 (20) '2.0'\n+D1420 Created OS            03 (3) 'Unix'\n+D1421 Extract Zip Spec      0A (10) '1.0'\n+D1422 Extract OS            00 (0) 'MS-DOS'\n+D1423 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0EA7 Compression Method    0000 (0) 'Stored'\n-D0EA9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0EAD CRC                   00000000 (0)\n-D0EB1 Compressed Size       00000000 (0)\n-D0EB5 Uncompressed Size     00000000 (0)\n-D0EB9 Filename Length       002F (47)\n-D0EBB Extra Length          0000 (0)\n-D0EBD Comment Length        0000 (0)\n-D0EBF Disk Start            0000 (0)\n-D0EC1 Int File Attributes   0000 (0)\n+D1425 Compression Method    0000 (0) 'Stored'\n+D1427 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D142B CRC                   00000000 (0)\n+D142F Compressed Size       00000000 (0)\n+D1433 Uncompressed Size     00000000 (0)\n+D1437 Filename Length       002F (47)\n+D1439 Extra Length          0000 (0)\n+D143B Comment Length        0000 (0)\n+D143D Disk Start            0000 (0)\n+D143F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0EC3 Ext File Attributes   41ED0010 (1106051088)\n+D1441 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0EC7 Local Header Offset   00006579 (25977)\n-D0ECB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1445 Local Header Offset   00006579 (25977)\n+D1449 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0ECB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1449: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0ECB: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1449: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0EA3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1421: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0EFA CENTRAL HEADER #230   02014B50 (33639248)\n-D0EFE Created Zip Spec      14 (20) '2.0'\n-D0EFF Created OS            03 (3) 'Unix'\n-D0F00 Extract Zip Spec      0A (10) '1.0'\n-D0F01 Extract OS            00 (0) 'MS-DOS'\n-D0F02 General Purpose Flag  0800 (2048)\n+D1478 CENTRAL HEADER #230   02014B50 (33639248)\n+D147C Created Zip Spec      14 (20) '2.0'\n+D147D Created OS            03 (3) 'Unix'\n+D147E Extract Zip Spec      0A (10) '1.0'\n+D147F Extract OS            00 (0) 'MS-DOS'\n+D1480 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0F04 Compression Method    0000 (0) 'Stored'\n-D0F06 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0F0A CRC                   00000000 (0)\n-D0F0E Compressed Size       00000000 (0)\n-D0F12 Uncompressed Size     00000000 (0)\n-D0F16 Filename Length       0038 (56)\n-D0F18 Extra Length          0000 (0)\n-D0F1A Comment Length        0000 (0)\n-D0F1C Disk Start            0000 (0)\n-D0F1E Int File Attributes   0000 (0)\n+D1482 Compression Method    0000 (0) 'Stored'\n+D1484 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1488 CRC                   00000000 (0)\n+D148C Compressed Size       00000000 (0)\n+D1490 Uncompressed Size     00000000 (0)\n+D1494 Filename Length       0038 (56)\n+D1496 Extra Length          0000 (0)\n+D1498 Comment Length        0000 (0)\n+D149A Disk Start            0000 (0)\n+D149C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0F20 Ext File Attributes   41ED0010 (1106051088)\n+D149E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0F24 Local Header Offset   000065C6 (26054)\n-D0F28 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D14A2 Local Header Offset   000065C6 (26054)\n+D14A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0F28: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD14A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0F28: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD14A6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0F00: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD147E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0F60 CENTRAL HEADER #231   02014B50 (33639248)\n-D0F64 Created Zip Spec      14 (20) '2.0'\n-D0F65 Created OS            03 (3) 'Unix'\n-D0F66 Extract Zip Spec      0A (10) '1.0'\n-D0F67 Extract OS            00 (0) 'MS-DOS'\n-D0F68 General Purpose Flag  0800 (2048)\n+D14DE CENTRAL HEADER #231   02014B50 (33639248)\n+D14E2 Created Zip Spec      14 (20) '2.0'\n+D14E3 Created OS            03 (3) 'Unix'\n+D14E4 Extract Zip Spec      0A (10) '1.0'\n+D14E5 Extract OS            00 (0) 'MS-DOS'\n+D14E6 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D0F6A Compression Method    0000 (0) 'Stored'\n-D0F6C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D0F70 CRC                   00000000 (0)\n-D0F74 Compressed Size       00000000 (0)\n-D0F78 Uncompressed Size     00000000 (0)\n-D0F7C Filename Length       006E (110)\n-D0F7E Extra Length          0000 (0)\n-D0F80 Comment Length        0000 (0)\n-D0F82 Disk Start            0000 (0)\n-D0F84 Int File Attributes   0000 (0)\n+D14E8 Compression Method    0000 (0) 'Stored'\n+D14EA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D14EE CRC                   00000000 (0)\n+D14F2 Compressed Size       00000000 (0)\n+D14F6 Uncompressed Size     00000000 (0)\n+D14FA Filename Length       006E (110)\n+D14FC Extra Length          0000 (0)\n+D14FE Comment Length        0000 (0)\n+D1500 Disk Start            0000 (0)\n+D1502 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D0F86 Ext File Attributes   41ED0010 (1106051088)\n+D1504 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D0F8A Local Header Offset   0000661C (26140)\n-D0F8E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1508 Local Header Offset   0000661C (26140)\n+D150C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD0F8E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD150C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD0F8E: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD150C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD0F66: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD14E4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D0FFC CENTRAL HEADER #232   02014B50 (33639248)\n-D1000 Created Zip Spec      14 (20) '2.0'\n-D1001 Created OS            03 (3) 'Unix'\n-D1002 Extract Zip Spec      0A (10) '1.0'\n-D1003 Extract OS            00 (0) 'MS-DOS'\n-D1004 General Purpose Flag  0800 (2048)\n+D157A CENTRAL HEADER #232   02014B50 (33639248)\n+D157E Created Zip Spec      14 (20) '2.0'\n+D157F Created OS            03 (3) 'Unix'\n+D1580 Extract Zip Spec      0A (10) '1.0'\n+D1581 Extract OS            00 (0) 'MS-DOS'\n+D1582 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1006 Compression Method    0000 (0) 'Stored'\n-D1008 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D100C CRC                   00000000 (0)\n-D1010 Compressed Size       00000000 (0)\n-D1014 Uncompressed Size     00000000 (0)\n-D1018 Filename Length       0033 (51)\n-D101A Extra Length          0000 (0)\n-D101C Comment Length        0000 (0)\n-D101E Disk Start            0000 (0)\n-D1020 Int File Attributes   0000 (0)\n+D1584 Compression Method    0000 (0) 'Stored'\n+D1586 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D158A CRC                   00000000 (0)\n+D158E Compressed Size       00000000 (0)\n+D1592 Uncompressed Size     00000000 (0)\n+D1596 Filename Length       0033 (51)\n+D1598 Extra Length          0000 (0)\n+D159A Comment Length        0000 (0)\n+D159C Disk Start            0000 (0)\n+D159E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1022 Ext File Attributes   41ED0010 (1106051088)\n+D15A0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1026 Local Header Offset   000066A8 (26280)\n-D102A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D15A4 Local Header Offset   000066A8 (26280)\n+D15A8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD102A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD15A8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD102A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD15A8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1002: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1580: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D105D CENTRAL HEADER #233   02014B50 (33639248)\n-D1061 Created Zip Spec      14 (20) '2.0'\n-D1062 Created OS            03 (3) 'Unix'\n-D1063 Extract Zip Spec      0A (10) '1.0'\n-D1064 Extract OS            00 (0) 'MS-DOS'\n-D1065 General Purpose Flag  0800 (2048)\n+D15DB CENTRAL HEADER #233   02014B50 (33639248)\n+D15DF Created Zip Spec      14 (20) '2.0'\n+D15E0 Created OS            03 (3) 'Unix'\n+D15E1 Extract Zip Spec      0A (10) '1.0'\n+D15E2 Extract OS            00 (0) 'MS-DOS'\n+D15E3 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1067 Compression Method    0000 (0) 'Stored'\n-D1069 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D106D CRC                   00000000 (0)\n-D1071 Compressed Size       00000000 (0)\n-D1075 Uncompressed Size     00000000 (0)\n-D1079 Filename Length       003C (60)\n-D107B Extra Length          0000 (0)\n-D107D Comment Length        0000 (0)\n-D107F Disk Start            0000 (0)\n-D1081 Int File Attributes   0000 (0)\n+D15E5 Compression Method    0000 (0) 'Stored'\n+D15E7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D15EB CRC                   00000000 (0)\n+D15EF Compressed Size       00000000 (0)\n+D15F3 Uncompressed Size     00000000 (0)\n+D15F7 Filename Length       003C (60)\n+D15F9 Extra Length          0000 (0)\n+D15FB Comment Length        0000 (0)\n+D15FD Disk Start            0000 (0)\n+D15FF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1083 Ext File Attributes   41ED0010 (1106051088)\n+D1601 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1087 Local Header Offset   000066F9 (26361)\n-D108B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1605 Local Header Offset   000066F9 (26361)\n+D1609 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD108B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1609: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD108B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1609: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1063: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD15E1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D10C7 CENTRAL HEADER #234   02014B50 (33639248)\n-D10CB Created Zip Spec      14 (20) '2.0'\n-D10CC Created OS            03 (3) 'Unix'\n-D10CD Extract Zip Spec      0A (10) '1.0'\n-D10CE Extract OS            00 (0) 'MS-DOS'\n-D10CF General Purpose Flag  0800 (2048)\n+D1645 CENTRAL HEADER #234   02014B50 (33639248)\n+D1649 Created Zip Spec      14 (20) '2.0'\n+D164A Created OS            03 (3) 'Unix'\n+D164B Extract Zip Spec      0A (10) '1.0'\n+D164C Extract OS            00 (0) 'MS-DOS'\n+D164D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D10D1 Compression Method    0000 (0) 'Stored'\n-D10D3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D10D7 CRC                   00000000 (0)\n-D10DB Compressed Size       00000000 (0)\n-D10DF Uncompressed Size     00000000 (0)\n-D10E3 Filename Length       0072 (114)\n-D10E5 Extra Length          0000 (0)\n-D10E7 Comment Length        0000 (0)\n-D10E9 Disk Start            0000 (0)\n-D10EB Int File Attributes   0000 (0)\n+D164F Compression Method    0000 (0) 'Stored'\n+D1651 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1655 CRC                   00000000 (0)\n+D1659 Compressed Size       00000000 (0)\n+D165D Uncompressed Size     00000000 (0)\n+D1661 Filename Length       0072 (114)\n+D1663 Extra Length          0000 (0)\n+D1665 Comment Length        0000 (0)\n+D1667 Disk Start            0000 (0)\n+D1669 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D10ED Ext File Attributes   41ED0010 (1106051088)\n+D166B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D10F1 Local Header Offset   00006753 (26451)\n-D10F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D166F Local Header Offset   00006753 (26451)\n+D1673 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD10F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1673: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD10F5: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1673: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD10CD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD164B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1167 CENTRAL HEADER #235   02014B50 (33639248)\n-D116B Created Zip Spec      14 (20) '2.0'\n-D116C Created OS            03 (3) 'Unix'\n-D116D Extract Zip Spec      0A (10) '1.0'\n-D116E Extract OS            00 (0) 'MS-DOS'\n-D116F General Purpose Flag  0800 (2048)\n+D16E5 CENTRAL HEADER #235   02014B50 (33639248)\n+D16E9 Created Zip Spec      14 (20) '2.0'\n+D16EA Created OS            03 (3) 'Unix'\n+D16EB Extract Zip Spec      0A (10) '1.0'\n+D16EC Extract OS            00 (0) 'MS-DOS'\n+D16ED General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1171 Compression Method    0000 (0) 'Stored'\n-D1173 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1177 CRC                   00000000 (0)\n-D117B Compressed Size       00000000 (0)\n-D117F Uncompressed Size     00000000 (0)\n-D1183 Filename Length       0030 (48)\n-D1185 Extra Length          0000 (0)\n-D1187 Comment Length        0000 (0)\n-D1189 Disk Start            0000 (0)\n-D118B Int File Attributes   0000 (0)\n+D16EF Compression Method    0000 (0) 'Stored'\n+D16F1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D16F5 CRC                   00000000 (0)\n+D16F9 Compressed Size       00000000 (0)\n+D16FD Uncompressed Size     00000000 (0)\n+D1701 Filename Length       0030 (48)\n+D1703 Extra Length          0000 (0)\n+D1705 Comment Length        0000 (0)\n+D1707 Disk Start            0000 (0)\n+D1709 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D118D Ext File Attributes   41ED0010 (1106051088)\n+D170B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1191 Local Header Offset   000067E3 (26595)\n-D1195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D170F Local Header Offset   000067E3 (26595)\n+D1713 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1713: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1195: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1713: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD116D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD16EB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D11C5 CENTRAL HEADER #236   02014B50 (33639248)\n-D11C9 Created Zip Spec      14 (20) '2.0'\n-D11CA Created OS            03 (3) 'Unix'\n-D11CB Extract Zip Spec      0A (10) '1.0'\n-D11CC Extract OS            00 (0) 'MS-DOS'\n-D11CD General Purpose Flag  0800 (2048)\n+D1743 CENTRAL HEADER #236   02014B50 (33639248)\n+D1747 Created Zip Spec      14 (20) '2.0'\n+D1748 Created OS            03 (3) 'Unix'\n+D1749 Extract Zip Spec      0A (10) '1.0'\n+D174A Extract OS            00 (0) 'MS-DOS'\n+D174B General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D11CF Compression Method    0000 (0) 'Stored'\n-D11D1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D11D5 CRC                   00000000 (0)\n-D11D9 Compressed Size       00000000 (0)\n-D11DD Uncompressed Size     00000000 (0)\n-D11E1 Filename Length       0039 (57)\n-D11E3 Extra Length          0000 (0)\n-D11E5 Comment Length        0000 (0)\n-D11E7 Disk Start            0000 (0)\n-D11E9 Int File Attributes   0000 (0)\n+D174D Compression Method    0000 (0) 'Stored'\n+D174F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1753 CRC                   00000000 (0)\n+D1757 Compressed Size       00000000 (0)\n+D175B Uncompressed Size     00000000 (0)\n+D175F Filename Length       0039 (57)\n+D1761 Extra Length          0000 (0)\n+D1763 Comment Length        0000 (0)\n+D1765 Disk Start            0000 (0)\n+D1767 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D11EB Ext File Attributes   41ED0010 (1106051088)\n+D1769 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D11EF Local Header Offset   00006831 (26673)\n-D11F3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D176D Local Header Offset   00006831 (26673)\n+D1771 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD11F3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1771: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD11F3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1771: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD11CB: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1749: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D122C CENTRAL HEADER #237   02014B50 (33639248)\n-D1230 Created Zip Spec      14 (20) '2.0'\n-D1231 Created OS            03 (3) 'Unix'\n-D1232 Extract Zip Spec      0A (10) '1.0'\n-D1233 Extract OS            00 (0) 'MS-DOS'\n-D1234 General Purpose Flag  0800 (2048)\n+D17AA CENTRAL HEADER #237   02014B50 (33639248)\n+D17AE Created Zip Spec      14 (20) '2.0'\n+D17AF Created OS            03 (3) 'Unix'\n+D17B0 Extract Zip Spec      0A (10) '1.0'\n+D17B1 Extract OS            00 (0) 'MS-DOS'\n+D17B2 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1236 Compression Method    0000 (0) 'Stored'\n-D1238 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D123C CRC                   00000000 (0)\n-D1240 Compressed Size       00000000 (0)\n-D1244 Uncompressed Size     00000000 (0)\n-D1248 Filename Length       007D (125)\n-D124A Extra Length          0000 (0)\n-D124C Comment Length        0000 (0)\n-D124E Disk Start            0000 (0)\n-D1250 Int File Attributes   0000 (0)\n+D17B4 Compression Method    0000 (0) 'Stored'\n+D17B6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D17BA CRC                   00000000 (0)\n+D17BE Compressed Size       00000000 (0)\n+D17C2 Uncompressed Size     00000000 (0)\n+D17C6 Filename Length       007D (125)\n+D17C8 Extra Length          0000 (0)\n+D17CA Comment Length        0000 (0)\n+D17CC Disk Start            0000 (0)\n+D17CE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1252 Ext File Attributes   41ED0010 (1106051088)\n+D17D0 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1256 Local Header Offset   00006888 (26760)\n-D125A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D17D4 Local Header Offset   00006888 (26760)\n+D17D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD125A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD17D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD125A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD17D8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1232: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD17B0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D12D7 CENTRAL HEADER #238   02014B50 (33639248)\n-D12DB Created Zip Spec      14 (20) '2.0'\n-D12DC Created OS            03 (3) 'Unix'\n-D12DD Extract Zip Spec      0A (10) '1.0'\n-D12DE Extract OS            00 (0) 'MS-DOS'\n-D12DF General Purpose Flag  0800 (2048)\n+D1855 CENTRAL HEADER #238   02014B50 (33639248)\n+D1859 Created Zip Spec      14 (20) '2.0'\n+D185A Created OS            03 (3) 'Unix'\n+D185B Extract Zip Spec      0A (10) '1.0'\n+D185C Extract OS            00 (0) 'MS-DOS'\n+D185D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D12E1 Compression Method    0000 (0) 'Stored'\n-D12E3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D12E7 CRC                   00000000 (0)\n-D12EB Compressed Size       00000000 (0)\n-D12EF Uncompressed Size     00000000 (0)\n-D12F3 Filename Length       0031 (49)\n-D12F5 Extra Length          0000 (0)\n-D12F7 Comment Length        0000 (0)\n-D12F9 Disk Start            0000 (0)\n-D12FB Int File Attributes   0000 (0)\n+D185F Compression Method    0000 (0) 'Stored'\n+D1861 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1865 CRC                   00000000 (0)\n+D1869 Compressed Size       00000000 (0)\n+D186D Uncompressed Size     00000000 (0)\n+D1871 Filename Length       0031 (49)\n+D1873 Extra Length          0000 (0)\n+D1875 Comment Length        0000 (0)\n+D1877 Disk Start            0000 (0)\n+D1879 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D12FD Ext File Attributes   41ED0010 (1106051088)\n+D187B Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1301 Local Header Offset   00006923 (26915)\n-D1305 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D187F Local Header Offset   00006923 (26915)\n+D1883 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1305: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1883: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1305: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1883: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD12DD: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD185B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1336 CENTRAL HEADER #239   02014B50 (33639248)\n-D133A Created Zip Spec      14 (20) '2.0'\n-D133B Created OS            03 (3) 'Unix'\n-D133C Extract Zip Spec      0A (10) '1.0'\n-D133D Extract OS            00 (0) 'MS-DOS'\n-D133E General Purpose Flag  0800 (2048)\n+D18B4 CENTRAL HEADER #239   02014B50 (33639248)\n+D18B8 Created Zip Spec      14 (20) '2.0'\n+D18B9 Created OS            03 (3) 'Unix'\n+D18BA Extract Zip Spec      0A (10) '1.0'\n+D18BB Extract OS            00 (0) 'MS-DOS'\n+D18BC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1340 Compression Method    0000 (0) 'Stored'\n-D1342 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1346 CRC                   00000000 (0)\n-D134A Compressed Size       00000000 (0)\n-D134E Uncompressed Size     00000000 (0)\n-D1352 Filename Length       003A (58)\n-D1354 Extra Length          0000 (0)\n-D1356 Comment Length        0000 (0)\n-D1358 Disk Start            0000 (0)\n-D135A Int File Attributes   0000 (0)\n+D18BE Compression Method    0000 (0) 'Stored'\n+D18C0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D18C4 CRC                   00000000 (0)\n+D18C8 Compressed Size       00000000 (0)\n+D18CC Uncompressed Size     00000000 (0)\n+D18D0 Filename Length       003A (58)\n+D18D2 Extra Length          0000 (0)\n+D18D4 Comment Length        0000 (0)\n+D18D6 Disk Start            0000 (0)\n+D18D8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D135C Ext File Attributes   41ED0010 (1106051088)\n+D18DA Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1360 Local Header Offset   00006972 (26994)\n-D1364 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D18DE Local Header Offset   00006972 (26994)\n+D18E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1364: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD18E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1364: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD18E2: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD133C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD18BA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D139E CENTRAL HEADER #240   02014B50 (33639248)\n-D13A2 Created Zip Spec      14 (20) '2.0'\n-D13A3 Created OS            03 (3) 'Unix'\n-D13A4 Extract Zip Spec      0A (10) '1.0'\n-D13A5 Extract OS            00 (0) 'MS-DOS'\n-D13A6 General Purpose Flag  0800 (2048)\n+D191C CENTRAL HEADER #240   02014B50 (33639248)\n+D1920 Created Zip Spec      14 (20) '2.0'\n+D1921 Created OS            03 (3) 'Unix'\n+D1922 Extract Zip Spec      0A (10) '1.0'\n+D1923 Extract OS            00 (0) 'MS-DOS'\n+D1924 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D13A8 Compression Method    0000 (0) 'Stored'\n-D13AA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D13AE CRC                   00000000 (0)\n-D13B2 Compressed Size       00000000 (0)\n-D13B6 Uncompressed Size     00000000 (0)\n-D13BA Filename Length       006E (110)\n-D13BC Extra Length          0000 (0)\n-D13BE Comment Length        0000 (0)\n-D13C0 Disk Start            0000 (0)\n-D13C2 Int File Attributes   0000 (0)\n+D1926 Compression Method    0000 (0) 'Stored'\n+D1928 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D192C CRC                   00000000 (0)\n+D1930 Compressed Size       00000000 (0)\n+D1934 Uncompressed Size     00000000 (0)\n+D1938 Filename Length       006E (110)\n+D193A Extra Length          0000 (0)\n+D193C Comment Length        0000 (0)\n+D193E Disk Start            0000 (0)\n+D1940 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D13C4 Ext File Attributes   41ED0010 (1106051088)\n+D1942 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D13C8 Local Header Offset   000069CA (27082)\n-D13CC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1946 Local Header Offset   000069CA (27082)\n+D194A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD13CC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD194A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD13CC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD194A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD13A4: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1922: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D143A CENTRAL HEADER #241   02014B50 (33639248)\n-D143E Created Zip Spec      14 (20) '2.0'\n-D143F Created OS            03 (3) 'Unix'\n-D1440 Extract Zip Spec      0A (10) '1.0'\n-D1441 Extract OS            00 (0) 'MS-DOS'\n-D1442 General Purpose Flag  0800 (2048)\n+D19B8 CENTRAL HEADER #241   02014B50 (33639248)\n+D19BC Created Zip Spec      14 (20) '2.0'\n+D19BD Created OS            03 (3) 'Unix'\n+D19BE Extract Zip Spec      0A (10) '1.0'\n+D19BF Extract OS            00 (0) 'MS-DOS'\n+D19C0 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1444 Compression Method    0000 (0) 'Stored'\n-D1446 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D144A CRC                   00000000 (0)\n-D144E Compressed Size       00000000 (0)\n-D1452 Uncompressed Size     00000000 (0)\n-D1456 Filename Length       0026 (38)\n-D1458 Extra Length          0000 (0)\n-D145A Comment Length        0000 (0)\n-D145C Disk Start            0000 (0)\n-D145E Int File Attributes   0000 (0)\n+D19C2 Compression Method    0000 (0) 'Stored'\n+D19C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D19C8 CRC                   00000000 (0)\n+D19CC Compressed Size       00000000 (0)\n+D19D0 Uncompressed Size     00000000 (0)\n+D19D4 Filename Length       0026 (38)\n+D19D6 Extra Length          0000 (0)\n+D19D8 Comment Length        0000 (0)\n+D19DA Disk Start            0000 (0)\n+D19DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1460 Ext File Attributes   41ED0010 (1106051088)\n+D19DE Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1464 Local Header Offset   00006A56 (27222)\n-D1468 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D19E2 Local Header Offset   00006A56 (27222)\n+D19E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1468: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD19E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1468: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD19E6: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1440: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD19BE: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D148E CENTRAL HEADER #242   02014B50 (33639248)\n-D1492 Created Zip Spec      14 (20) '2.0'\n-D1493 Created OS            03 (3) 'Unix'\n-D1494 Extract Zip Spec      0A (10) '1.0'\n-D1495 Extract OS            00 (0) 'MS-DOS'\n-D1496 General Purpose Flag  0800 (2048)\n+D1A0C CENTRAL HEADER #242   02014B50 (33639248)\n+D1A10 Created Zip Spec      14 (20) '2.0'\n+D1A11 Created OS            03 (3) 'Unix'\n+D1A12 Extract Zip Spec      0A (10) '1.0'\n+D1A13 Extract OS            00 (0) 'MS-DOS'\n+D1A14 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1498 Compression Method    0000 (0) 'Stored'\n-D149A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D149E CRC                   00000000 (0)\n-D14A2 Compressed Size       00000000 (0)\n-D14A6 Uncompressed Size     00000000 (0)\n-D14AA Filename Length       002F (47)\n-D14AC Extra Length          0000 (0)\n-D14AE Comment Length        0000 (0)\n-D14B0 Disk Start            0000 (0)\n-D14B2 Int File Attributes   0000 (0)\n+D1A16 Compression Method    0000 (0) 'Stored'\n+D1A18 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1A1C CRC                   00000000 (0)\n+D1A20 Compressed Size       00000000 (0)\n+D1A24 Uncompressed Size     00000000 (0)\n+D1A28 Filename Length       002F (47)\n+D1A2A Extra Length          0000 (0)\n+D1A2C Comment Length        0000 (0)\n+D1A2E Disk Start            0000 (0)\n+D1A30 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D14B4 Ext File Attributes   41ED0010 (1106051088)\n+D1A32 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D14B8 Local Header Offset   00006A9A (27290)\n-D14BC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1A36 Local Header Offset   00006A9A (27290)\n+D1A3A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD14BC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1A3A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD14BC: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1A3A: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1494: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1A12: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D14EB CENTRAL HEADER #243   02014B50 (33639248)\n-D14EF Created Zip Spec      14 (20) '2.0'\n-D14F0 Created OS            03 (3) 'Unix'\n-D14F1 Extract Zip Spec      0A (10) '1.0'\n-D14F2 Extract OS            00 (0) 'MS-DOS'\n-D14F3 General Purpose Flag  0800 (2048)\n+D1A69 CENTRAL HEADER #243   02014B50 (33639248)\n+D1A6D Created Zip Spec      14 (20) '2.0'\n+D1A6E Created OS            03 (3) 'Unix'\n+D1A6F Extract Zip Spec      0A (10) '1.0'\n+D1A70 Extract OS            00 (0) 'MS-DOS'\n+D1A71 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D14F5 Compression Method    0000 (0) 'Stored'\n-D14F7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D14FB CRC                   00000000 (0)\n-D14FF Compressed Size       00000000 (0)\n-D1503 Uncompressed Size     00000000 (0)\n-D1507 Filename Length       005D (93)\n-D1509 Extra Length          0000 (0)\n-D150B Comment Length        0000 (0)\n-D150D Disk Start            0000 (0)\n-D150F Int File Attributes   0000 (0)\n+D1A73 Compression Method    0000 (0) 'Stored'\n+D1A75 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1A79 CRC                   00000000 (0)\n+D1A7D Compressed Size       00000000 (0)\n+D1A81 Uncompressed Size     00000000 (0)\n+D1A85 Filename Length       005D (93)\n+D1A87 Extra Length          0000 (0)\n+D1A89 Comment Length        0000 (0)\n+D1A8B Disk Start            0000 (0)\n+D1A8D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1511 Ext File Attributes   41ED0010 (1106051088)\n+D1A8F Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1515 Local Header Offset   00006AE7 (27367)\n-D1519 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1A93 Local Header Offset   00006AE7 (27367)\n+D1A97 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1519: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1A97: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1519: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1A97: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD14F1: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1A6F: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1576 CENTRAL HEADER #244   02014B50 (33639248)\n-D157A Created Zip Spec      14 (20) '2.0'\n-D157B Created OS            03 (3) 'Unix'\n-D157C Extract Zip Spec      0A (10) '1.0'\n-D157D Extract OS            00 (0) 'MS-DOS'\n-D157E General Purpose Flag  0800 (2048)\n+D1AF4 CENTRAL HEADER #244   02014B50 (33639248)\n+D1AF8 Created Zip Spec      14 (20) '2.0'\n+D1AF9 Created OS            03 (3) 'Unix'\n+D1AFA Extract Zip Spec      0A (10) '1.0'\n+D1AFB Extract OS            00 (0) 'MS-DOS'\n+D1AFC General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1580 Compression Method    0000 (0) 'Stored'\n-D1582 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1586 CRC                   00000000 (0)\n-D158A Compressed Size       00000000 (0)\n-D158E Uncompressed Size     00000000 (0)\n-D1592 Filename Length       0063 (99)\n-D1594 Extra Length          0000 (0)\n-D1596 Comment Length        0000 (0)\n-D1598 Disk Start            0000 (0)\n-D159A Int File Attributes   0000 (0)\n+D1AFE Compression Method    0000 (0) 'Stored'\n+D1B00 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1B04 CRC                   00000000 (0)\n+D1B08 Compressed Size       00000000 (0)\n+D1B0C Uncompressed Size     00000000 (0)\n+D1B10 Filename Length       0063 (99)\n+D1B12 Extra Length          0000 (0)\n+D1B14 Comment Length        0000 (0)\n+D1B16 Disk Start            0000 (0)\n+D1B18 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D159C Ext File Attributes   41ED0010 (1106051088)\n+D1B1A Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D15A0 Local Header Offset   00006B62 (27490)\n-D15A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1B1E Local Header Offset   00006B62 (27490)\n+D1B22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD15A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1B22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD15A4: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1B22: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD157C: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1AFA: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1607 CENTRAL HEADER #245   02014B50 (33639248)\n-D160B Created Zip Spec      14 (20) '2.0'\n-D160C Created OS            03 (3) 'Unix'\n-D160D Extract Zip Spec      0A (10) '1.0'\n-D160E Extract OS            00 (0) 'MS-DOS'\n-D160F General Purpose Flag  0800 (2048)\n+D1B85 CENTRAL HEADER #245   02014B50 (33639248)\n+D1B89 Created Zip Spec      14 (20) '2.0'\n+D1B8A Created OS            03 (3) 'Unix'\n+D1B8B Extract Zip Spec      0A (10) '1.0'\n+D1B8C Extract OS            00 (0) 'MS-DOS'\n+D1B8D General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D1611 Compression Method    0000 (0) 'Stored'\n-D1613 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1617 CRC                   00000000 (0)\n-D161B Compressed Size       00000000 (0)\n-D161F Uncompressed Size     00000000 (0)\n-D1623 Filename Length       002F (47)\n-D1625 Extra Length          0000 (0)\n-D1627 Comment Length        0000 (0)\n-D1629 Disk Start            0000 (0)\n-D162B Int File Attributes   0000 (0)\n+D1B8F Compression Method    0000 (0) 'Stored'\n+D1B91 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1B95 CRC                   00000000 (0)\n+D1B99 Compressed Size       00000000 (0)\n+D1B9D Uncompressed Size     00000000 (0)\n+D1BA1 Filename Length       002F (47)\n+D1BA3 Extra Length          0000 (0)\n+D1BA5 Comment Length        0000 (0)\n+D1BA7 Disk Start            0000 (0)\n+D1BA9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D162D Ext File Attributes   41ED0010 (1106051088)\n+D1BAB Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1631 Local Header Offset   00006BE3 (27619)\n-D1635 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1BAF Local Header Offset   00006BE3 (27619)\n+D1BB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1635: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1BB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1635: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1BB3: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD160D: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1B8B: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1664 CENTRAL HEADER #246   02014B50 (33639248)\n-D1668 Created Zip Spec      14 (20) '2.0'\n-D1669 Created OS            03 (3) 'Unix'\n-D166A Extract Zip Spec      0A (10) '1.0'\n-D166B Extract OS            00 (0) 'MS-DOS'\n-D166C General Purpose Flag  0800 (2048)\n+D1BE2 CENTRAL HEADER #246   02014B50 (33639248)\n+D1BE6 Created Zip Spec      14 (20) '2.0'\n+D1BE7 Created OS            03 (3) 'Unix'\n+D1BE8 Extract Zip Spec      0A (10) '1.0'\n+D1BE9 Extract OS            00 (0) 'MS-DOS'\n+D1BEA General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D166E Compression Method    0000 (0) 'Stored'\n-D1670 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1674 CRC                   00000000 (0)\n-D1678 Compressed Size       00000000 (0)\n-D167C Uncompressed Size     00000000 (0)\n-D1680 Filename Length       0038 (56)\n-D1682 Extra Length          0000 (0)\n-D1684 Comment Length        0000 (0)\n-D1686 Disk Start            0000 (0)\n-D1688 Int File Attributes   0000 (0)\n+D1BEC Compression Method    0000 (0) 'Stored'\n+D1BEE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1BF2 CRC                   00000000 (0)\n+D1BF6 Compressed Size       00000000 (0)\n+D1BFA Uncompressed Size     00000000 (0)\n+D1BFE Filename Length       0038 (56)\n+D1C00 Extra Length          0000 (0)\n+D1C02 Comment Length        0000 (0)\n+D1C04 Disk Start            0000 (0)\n+D1C06 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D168A Ext File Attributes   41ED0010 (1106051088)\n+D1C08 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D168E Local Header Offset   00006C30 (27696)\n-D1692 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1C0C Local Header Offset   00006C30 (27696)\n+D1C10 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1692: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1C10: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1692: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1C10: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD166A: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1BE8: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D16CA CENTRAL HEADER #247   02014B50 (33639248)\n-D16CE Created Zip Spec      14 (20) '2.0'\n-D16CF Created OS            03 (3) 'Unix'\n-D16D0 Extract Zip Spec      0A (10) '1.0'\n-D16D1 Extract OS            00 (0) 'MS-DOS'\n-D16D2 General Purpose Flag  0800 (2048)\n+D1C48 CENTRAL HEADER #247   02014B50 (33639248)\n+D1C4C Created Zip Spec      14 (20) '2.0'\n+D1C4D Created OS            03 (3) 'Unix'\n+D1C4E Extract Zip Spec      0A (10) '1.0'\n+D1C4F Extract OS            00 (0) 'MS-DOS'\n+D1C50 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D16D4 Compression Method    0000 (0) 'Stored'\n-D16D6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D16DA CRC                   00000000 (0)\n-D16DE Compressed Size       00000000 (0)\n-D16E2 Uncompressed Size     00000000 (0)\n-D16E6 Filename Length       006B (107)\n-D16E8 Extra Length          0000 (0)\n-D16EA Comment Length        0000 (0)\n-D16EC Disk Start            0000 (0)\n-D16EE Int File Attributes   0000 (0)\n+D1C52 Compression Method    0000 (0) 'Stored'\n+D1C54 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1C58 CRC                   00000000 (0)\n+D1C5C Compressed Size       00000000 (0)\n+D1C60 Uncompressed Size     00000000 (0)\n+D1C64 Filename Length       006B (107)\n+D1C66 Extra Length          0000 (0)\n+D1C68 Comment Length        0000 (0)\n+D1C6A Disk Start            0000 (0)\n+D1C6C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D16F0 Ext File Attributes   41ED0010 (1106051088)\n+D1C6E Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D16F4 Local Header Offset   00006C86 (27782)\n-D16F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1C72 Local Header Offset   00006C86 (27782)\n+D1C76 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD16F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1C76: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD16F8: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1C76: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD16D0: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1C4E: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1763 CENTRAL HEADER #248   02014B50 (33639248)\n-D1767 Created Zip Spec      14 (20) '2.0'\n-D1768 Created OS            03 (3) 'Unix'\n-D1769 Extract Zip Spec      0A (10) '1.0'\n-D176A Extract OS            00 (0) 'MS-DOS'\n-D176B General Purpose Flag  0800 (2048)\n+D1CE1 CENTRAL HEADER #248   02014B50 (33639248)\n+D1CE5 Created Zip Spec      14 (20) '2.0'\n+D1CE6 Created OS            03 (3) 'Unix'\n+D1CE7 Extract Zip Spec      0A (10) '1.0'\n+D1CE8 Extract OS            00 (0) 'MS-DOS'\n+D1CE9 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D176D Compression Method    0000 (0) 'Stored'\n-D176F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1773 CRC                   00000000 (0)\n-D1777 Compressed Size       00000000 (0)\n-D177B Uncompressed Size     00000000 (0)\n-D177F Filename Length       000F (15)\n-D1781 Extra Length          0000 (0)\n-D1783 Comment Length        0000 (0)\n-D1785 Disk Start            0000 (0)\n-D1787 Int File Attributes   0000 (0)\n+D1CEB Compression Method    0000 (0) 'Stored'\n+D1CED Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1CF1 CRC                   00000000 (0)\n+D1CF5 Compressed Size       00000000 (0)\n+D1CF9 Uncompressed Size     00000000 (0)\n+D1CFD Filename Length       000F (15)\n+D1CFF Extra Length          0000 (0)\n+D1D01 Comment Length        0000 (0)\n+D1D03 Disk Start            0000 (0)\n+D1D05 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1789 Ext File Attributes   41ED0010 (1106051088)\n+D1D07 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D178D Local Header Offset   00006D0F (27919)\n-D1791 Filename              'XXXXXXXXXXXXXXX'\n+D1D0B Local Header Offset   00006D0F (27919)\n+D1D0F Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1791: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1D0F: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD1791: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1D0F: Directory 'XXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD1769: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1CE7: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXX'\n #\n \n-D17A0 CENTRAL HEADER #249   02014B50 (33639248)\n-D17A4 Created Zip Spec      14 (20) '2.0'\n-D17A5 Created OS            03 (3) 'Unix'\n-D17A6 Extract Zip Spec      0A (10) '1.0'\n-D17A7 Extract OS            00 (0) 'MS-DOS'\n-D17A8 General Purpose Flag  0800 (2048)\n+D1D1E CENTRAL HEADER #249   02014B50 (33639248)\n+D1D22 Created Zip Spec      14 (20) '2.0'\n+D1D23 Created OS            03 (3) 'Unix'\n+D1D24 Extract Zip Spec      0A (10) '1.0'\n+D1D25 Extract OS            00 (0) 'MS-DOS'\n+D1D26 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D17AA Compression Method    0000 (0) 'Stored'\n-D17AC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D17B0 CRC                   00000000 (0)\n-D17B4 Compressed Size       00000000 (0)\n-D17B8 Uncompressed Size     00000000 (0)\n-D17BC Filename Length       001F (31)\n-D17BE Extra Length          0000 (0)\n-D17C0 Comment Length        0000 (0)\n-D17C2 Disk Start            0000 (0)\n-D17C4 Int File Attributes   0000 (0)\n+D1D28 Compression Method    0000 (0) 'Stored'\n+D1D2A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1D2E CRC                   00000000 (0)\n+D1D32 Compressed Size       00000000 (0)\n+D1D36 Uncompressed Size     00000000 (0)\n+D1D3A Filename Length       001F (31)\n+D1D3C Extra Length          0000 (0)\n+D1D3E Comment Length        0000 (0)\n+D1D40 Disk Start            0000 (0)\n+D1D42 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D17C6 Ext File Attributes   41ED0010 (1106051088)\n+D1D44 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D17CA Local Header Offset   00006D3C (27964)\n-D17CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1D48 Local Header Offset   00006D3C (27964)\n+D1D4C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD17CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1D4C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD17CE: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1D4C: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD17A6: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1D24: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D17ED CENTRAL HEADER #250   02014B50 (33639248)\n-D17F1 Created Zip Spec      14 (20) '2.0'\n-D17F2 Created OS            03 (3) 'Unix'\n-D17F3 Extract Zip Spec      0A (10) '1.0'\n-D17F4 Extract OS            00 (0) 'MS-DOS'\n-D17F5 General Purpose Flag  0800 (2048)\n+D1D6B CENTRAL HEADER #250   02014B50 (33639248)\n+D1D6F Created Zip Spec      14 (20) '2.0'\n+D1D70 Created OS            03 (3) 'Unix'\n+D1D71 Extract Zip Spec      0A (10) '1.0'\n+D1D72 Extract OS            00 (0) 'MS-DOS'\n+D1D73 General Purpose Flag  0800 (2048)\n       [Bit 11]              1 'Language Encoding'\n-D17F7 Compression Method    0000 (0) 'Stored'\n-D17F9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D17FD CRC                   00000000 (0)\n-D1801 Compressed Size       00000000 (0)\n-D1805 Uncompressed Size     00000000 (0)\n-D1809 Filename Length       0035 (53)\n-D180B Extra Length          0000 (0)\n-D180D Comment Length        0000 (0)\n-D180F Disk Start            0000 (0)\n-D1811 Int File Attributes   0000 (0)\n+D1D75 Compression Method    0000 (0) 'Stored'\n+D1D77 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1D7B CRC                   00000000 (0)\n+D1D7F Compressed Size       00000000 (0)\n+D1D83 Uncompressed Size     00000000 (0)\n+D1D87 Filename Length       0035 (53)\n+D1D89 Extra Length          0000 (0)\n+D1D8B Comment Length        0000 (0)\n+D1D8D Disk Start            0000 (0)\n+D1D8F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1813 Ext File Attributes   41ED0010 (1106051088)\n+D1D91 Ext File Attributes   41ED0010 (1106051088)\n       [Bit 4]               Directory\n       [Bits 16-24]          01ED (493) 'Unix attrib: rwxr-xr-x'\n       [Bits 28-31]          04 (4) 'Directory'\n-D1817 Local Header Offset   00006D79 (28025)\n-D181B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1D95 Local Header Offset   00006D79 (28025)\n+D1D99 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD181B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1D99: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n-# ERROR: Offset 0xD181B: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n+# ERROR: Offset 0xD1D99: Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' must end in a '/'\n #        'External Attributes' flag this as a directory\n #\n-# WARNING: Offset 0xD17F3: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1D71: 'Extract Zip Spec' is '1.0'. Need value >= '2.0' for Directory 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n \n-D1850 CENTRAL HEADER #251   02014B50 (33639248)\n-D1854 Created Zip Spec      14 (20) '2.0'\n-D1855 Created OS            03 (3) 'Unix'\n-D1856 Extract Zip Spec      14 (20) '2.0'\n-D1857 Extract OS            00 (0) 'MS-DOS'\n-D1858 General Purpose Flag  0800 (2048)\n+D1DCE CENTRAL HEADER #251   02014B50 (33639248)\n+D1DD2 Created Zip Spec      14 (20) '2.0'\n+D1DD3 Created OS            03 (3) 'Unix'\n+D1DD4 Extract Zip Spec      14 (20) '2.0'\n+D1DD5 Extract OS            00 (0) 'MS-DOS'\n+D1DD6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D185A Compression Method    0008 (8) 'Deflated'\n-D185C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1860 CRC                   C348FE22 (3276340770)\n-D1864 Compressed Size       00000E1C (3612)\n-D1868 Uncompressed Size     0000B81E (47134)\n-D186C Filename Length       0015 (21)\n-D186E Extra Length          0000 (0)\n-D1870 Comment Length        0000 (0)\n-D1872 Disk Start            0000 (0)\n-D1874 Int File Attributes   0000 (0)\n+D1DD8 Compression Method    0008 (8) 'Deflated'\n+D1DDA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1DDE CRC                   C348FE22 (3276340770)\n+D1DE2 Compressed Size       00000E1C (3612)\n+D1DE6 Uncompressed Size     0000B81E (47134)\n+D1DEA Filename Length       0015 (21)\n+D1DEC Extra Length          0000 (0)\n+D1DEE Comment Length        0000 (0)\n+D1DF0 Disk Start            0000 (0)\n+D1DF2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1876 Ext File Attributes   81A40000 (2175008768)\n+D1DF4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D187A Local Header Offset   00006DCC (28108)\n-D187E Filename              'XXXXXXXXXXXXXXXXXXXXX'\n+D1DF8 Local Header Offset   00006DCC (28108)\n+D1DFC Filename              'XXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD187E: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1DFC: Filename 'XXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1893 CENTRAL HEADER #252   02014B50 (33639248)\n-D1897 Created Zip Spec      14 (20) '2.0'\n-D1898 Created OS            03 (3) 'Unix'\n-D1899 Extract Zip Spec      14 (20) '2.0'\n-D189A Extract OS            00 (0) 'MS-DOS'\n-D189B General Purpose Flag  0800 (2048)\n+D1E11 CENTRAL HEADER #252   02014B50 (33639248)\n+D1E15 Created Zip Spec      14 (20) '2.0'\n+D1E16 Created OS            03 (3) 'Unix'\n+D1E17 Extract Zip Spec      14 (20) '2.0'\n+D1E18 Extract OS            00 (0) 'MS-DOS'\n+D1E19 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D189D Compression Method    0008 (8) 'Deflated'\n-D189F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D18A3 CRC                   86E2B4B4 (2263004340)\n-D18A7 Compressed Size       00000F6D (3949)\n-D18AB Uncompressed Size     00002C5E (11358)\n-D18AF Filename Length       0010 (16)\n-D18B1 Extra Length          0000 (0)\n-D18B3 Comment Length        0000 (0)\n-D18B5 Disk Start            0000 (0)\n-D18B7 Int File Attributes   0000 (0)\n+D1E1B Compression Method    0008 (8) 'Deflated'\n+D1E1D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1E21 CRC                   86E2B4B4 (2263004340)\n+D1E25 Compressed Size       00000F6D (3949)\n+D1E29 Uncompressed Size     00002C5E (11358)\n+D1E2D Filename Length       0010 (16)\n+D1E2F Extra Length          0000 (0)\n+D1E31 Comment Length        0000 (0)\n+D1E33 Disk Start            0000 (0)\n+D1E35 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D18B9 Ext File Attributes   81A40000 (2175008768)\n+D1E37 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D18BD Local Header Offset   00007C1B (31771)\n-D18C1 Filename              'XXXXXXXXXXXXXXXX'\n+D1E3B Local Header Offset   00007C1B (31771)\n+D1E3F Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD18C1: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1E3F: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D18D1 CENTRAL HEADER #253   02014B50 (33639248)\n-D18D5 Created Zip Spec      14 (20) '2.0'\n-D18D6 Created OS            03 (3) 'Unix'\n-D18D7 Extract Zip Spec      14 (20) '2.0'\n-D18D8 Extract OS            00 (0) 'MS-DOS'\n-D18D9 General Purpose Flag  0800 (2048)\n+D1E4F CENTRAL HEADER #253   02014B50 (33639248)\n+D1E53 Created Zip Spec      14 (20) '2.0'\n+D1E54 Created OS            03 (3) 'Unix'\n+D1E55 Extract Zip Spec      14 (20) '2.0'\n+D1E56 Extract OS            00 (0) 'MS-DOS'\n+D1E57 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D18DB Compression Method    0008 (8) 'Deflated'\n-D18DD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D18E1 CRC                   91A82808 (2443716616)\n-D18E5 Compressed Size       00000082 (130)\n-D18E9 Uncompressed Size     000000A0 (160)\n-D18ED Filename Length       000F (15)\n-D18EF Extra Length          0000 (0)\n-D18F1 Comment Length        0000 (0)\n-D18F3 Disk Start            0000 (0)\n-D18F5 Int File Attributes   0000 (0)\n+D1E59 Compression Method    0008 (8) 'Deflated'\n+D1E5B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1E5F CRC                   91A82808 (2443716616)\n+D1E63 Compressed Size       00000082 (130)\n+D1E67 Uncompressed Size     000000A0 (160)\n+D1E6B Filename Length       000F (15)\n+D1E6D Extra Length          0000 (0)\n+D1E6F Comment Length        0000 (0)\n+D1E71 Disk Start            0000 (0)\n+D1E73 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D18F7 Ext File Attributes   81A40000 (2175008768)\n+D1E75 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D18FB Local Header Offset   00008BB6 (35766)\n-D18FF Filename              'XXXXXXXXXXXXXXX'\n+D1E79 Local Header Offset   00008BB6 (35766)\n+D1E7D Filename              'XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD18FF: Filename 'XXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1E7D: Filename 'XXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D190E CENTRAL HEADER #254   02014B50 (33639248)\n-D1912 Created Zip Spec      14 (20) '2.0'\n-D1913 Created OS            03 (3) 'Unix'\n-D1914 Extract Zip Spec      14 (20) '2.0'\n-D1915 Extract OS            00 (0) 'MS-DOS'\n-D1916 General Purpose Flag  0800 (2048)\n+D1E8C CENTRAL HEADER #254   02014B50 (33639248)\n+D1E90 Created Zip Spec      14 (20) '2.0'\n+D1E91 Created OS            03 (3) 'Unix'\n+D1E92 Extract Zip Spec      14 (20) '2.0'\n+D1E93 Extract OS            00 (0) 'MS-DOS'\n+D1E94 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1918 Compression Method    0008 (8) 'Deflated'\n-D191A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D191E CRC                   091B3793 (152778643)\n-D1922 Compressed Size       000002EC (748)\n-D1926 Uncompressed Size     0000050D (1293)\n-D192A Filename Length       0010 (16)\n-D192C Extra Length          0000 (0)\n-D192E Comment Length        0000 (0)\n-D1930 Disk Start            0000 (0)\n-D1932 Int File Attributes   0000 (0)\n+D1E96 Compression Method    0008 (8) 'Deflated'\n+D1E98 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1E9C CRC                   92D455DD (2463389149)\n+D1EA0 Compressed Size       000002BA (698)\n+D1EA4 Uncompressed Size     000004A4 (1188)\n+D1EA8 Filename Length       0010 (16)\n+D1EAA Extra Length          0000 (0)\n+D1EAC Comment Length        0000 (0)\n+D1EAE Disk Start            0000 (0)\n+D1EB0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1934 Ext File Attributes   81A40000 (2175008768)\n+D1EB2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1938 Local Header Offset   00008C65 (35941)\n-D193C Filename              'XXXXXXXXXXXXXXXX'\n+D1EB6 Local Header Offset   00008C65 (35941)\n+D1EBA Filename              'XXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD193C: Filename 'XXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1EBA: Filename 'XXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D194C CENTRAL HEADER #255   02014B50 (33639248)\n-D1950 Created Zip Spec      14 (20) '2.0'\n-D1951 Created OS            03 (3) 'Unix'\n-D1952 Extract Zip Spec      14 (20) '2.0'\n-D1953 Extract OS            00 (0) 'MS-DOS'\n-D1954 General Purpose Flag  0800 (2048)\n+D1ECA CENTRAL HEADER #255   02014B50 (33639248)\n+D1ECE Created Zip Spec      14 (20) '2.0'\n+D1ECF Created OS            03 (3) 'Unix'\n+D1ED0 Extract Zip Spec      14 (20) '2.0'\n+D1ED1 Extract OS            00 (0) 'MS-DOS'\n+D1ED2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1956 Compression Method    0008 (8) 'Deflated'\n-D1958 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D195C CRC                   9CB4EC6B (2629102699)\n-D1960 Compressed Size       00000546 (1350)\n-D1964 Uncompressed Size     00000AA2 (2722)\n-D1968 Filename Length       007D (125)\n-D196A Extra Length          0000 (0)\n-D196C Comment Length        0000 (0)\n-D196E Disk Start            0000 (0)\n-D1970 Int File Attributes   0000 (0)\n+D1ED4 Compression Method    0008 (8) 'Deflated'\n+D1ED6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1EDA CRC                   9CB4EC6B (2629102699)\n+D1EDE Compressed Size       00000546 (1350)\n+D1EE2 Uncompressed Size     00000AA2 (2722)\n+D1EE6 Filename Length       007D (125)\n+D1EE8 Extra Length          0000 (0)\n+D1EEA Comment Length        0000 (0)\n+D1EEC Disk Start            0000 (0)\n+D1EEE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1972 Ext File Attributes   81A40000 (2175008768)\n+D1EF0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1976 Local Header Offset   00008F7F (36735)\n-D197A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1EF4 Local Header Offset   00008F4D (36685)\n+D1EF8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD197A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1EF8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D19F7 CENTRAL HEADER #256   02014B50 (33639248)\n-D19FB Created Zip Spec      14 (20) '2.0'\n-D19FC Created OS            03 (3) 'Unix'\n-D19FD Extract Zip Spec      14 (20) '2.0'\n-D19FE Extract OS            00 (0) 'MS-DOS'\n-D19FF General Purpose Flag  0800 (2048)\n+D1F75 CENTRAL HEADER #256   02014B50 (33639248)\n+D1F79 Created Zip Spec      14 (20) '2.0'\n+D1F7A Created OS            03 (3) 'Unix'\n+D1F7B Extract Zip Spec      14 (20) '2.0'\n+D1F7C Extract OS            00 (0) 'MS-DOS'\n+D1F7D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1A01 Compression Method    0008 (8) 'Deflated'\n-D1A03 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1A07 CRC                   445AD7B2 (1146804146)\n-D1A0B Compressed Size       000006D4 (1748)\n-D1A0F Uncompressed Size     00000FBF (4031)\n-D1A13 Filename Length       006E (110)\n-D1A15 Extra Length          0000 (0)\n-D1A17 Comment Length        0000 (0)\n-D1A19 Disk Start            0000 (0)\n-D1A1B Int File Attributes   0000 (0)\n+D1F7F Compression Method    0008 (8) 'Deflated'\n+D1F81 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D1F85 CRC                   445AD7B2 (1146804146)\n+D1F89 Compressed Size       000006D4 (1748)\n+D1F8D Uncompressed Size     00000FBF (4031)\n+D1F91 Filename Length       006E (110)\n+D1F93 Extra Length          0000 (0)\n+D1F95 Comment Length        0000 (0)\n+D1F97 Disk Start            0000 (0)\n+D1F99 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1A1D Ext File Attributes   81A40000 (2175008768)\n+D1F9B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1A21 Local Header Offset   00009560 (38240)\n-D1A25 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D1F9F Local Header Offset   0000952E (38190)\n+D1FA3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1A25: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD1FA3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1A93 CENTRAL HEADER #257   02014B50 (33639248)\n-D1A97 Created Zip Spec      14 (20) '2.0'\n-D1A98 Created OS            03 (3) 'Unix'\n-D1A99 Extract Zip Spec      14 (20) '2.0'\n-D1A9A Extract OS            00 (0) 'MS-DOS'\n-D1A9B General Purpose Flag  0800 (2048)\n+D2011 CENTRAL HEADER #257   02014B50 (33639248)\n+D2015 Created Zip Spec      14 (20) '2.0'\n+D2016 Created OS            03 (3) 'Unix'\n+D2017 Extract Zip Spec      14 (20) '2.0'\n+D2018 Extract OS            00 (0) 'MS-DOS'\n+D2019 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1A9D Compression Method    0008 (8) 'Deflated'\n-D1A9F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1AA3 CRC                   A2A96EA2 (2729012898)\n-D1AA7 Compressed Size       0000092B (2347)\n-D1AAB Uncompressed Size     000016DE (5854)\n-D1AAF Filename Length       006E (110)\n-D1AB1 Extra Length          0000 (0)\n-D1AB3 Comment Length        0000 (0)\n-D1AB5 Disk Start            0000 (0)\n-D1AB7 Int File Attributes   0000 (0)\n+D201B Compression Method    0008 (8) 'Deflated'\n+D201D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2021 CRC                   A2A96EA2 (2729012898)\n+D2025 Compressed Size       0000092B (2347)\n+D2029 Uncompressed Size     000016DE (5854)\n+D202D Filename Length       006E (110)\n+D202F Extra Length          0000 (0)\n+D2031 Comment Length        0000 (0)\n+D2033 Disk Start            0000 (0)\n+D2035 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1AB9 Ext File Attributes   81A40000 (2175008768)\n+D2037 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1ABD Local Header Offset   00009CC0 (40128)\n-D1AC1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D203B Local Header Offset   00009C8E (40078)\n+D203F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1AC1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD203F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1B2F CENTRAL HEADER #258   02014B50 (33639248)\n-D1B33 Created Zip Spec      14 (20) '2.0'\n-D1B34 Created OS            03 (3) 'Unix'\n-D1B35 Extract Zip Spec      14 (20) '2.0'\n-D1B36 Extract OS            00 (0) 'MS-DOS'\n-D1B37 General Purpose Flag  0800 (2048)\n+D20AD CENTRAL HEADER #258   02014B50 (33639248)\n+D20B1 Created Zip Spec      14 (20) '2.0'\n+D20B2 Created OS            03 (3) 'Unix'\n+D20B3 Extract Zip Spec      14 (20) '2.0'\n+D20B4 Extract OS            00 (0) 'MS-DOS'\n+D20B5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1B39 Compression Method    0008 (8) 'Deflated'\n-D1B3B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1B3F CRC                   7416DF2A (1947655978)\n-D1B43 Compressed Size       0000091D (2333)\n-D1B47 Uncompressed Size     00001512 (5394)\n-D1B4B Filename Length       007E (126)\n-D1B4D Extra Length          0000 (0)\n-D1B4F Comment Length        0000 (0)\n-D1B51 Disk Start            0000 (0)\n-D1B53 Int File Attributes   0000 (0)\n+D20B7 Compression Method    0008 (8) 'Deflated'\n+D20B9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D20BD CRC                   7416DF2A (1947655978)\n+D20C1 Compressed Size       0000091D (2333)\n+D20C5 Uncompressed Size     00001512 (5394)\n+D20C9 Filename Length       007E (126)\n+D20CB Extra Length          0000 (0)\n+D20CD Comment Length        0000 (0)\n+D20CF Disk Start            0000 (0)\n+D20D1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1B55 Ext File Attributes   81A40000 (2175008768)\n+D20D3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1B59 Local Header Offset   0000A677 (42615)\n-D1B5D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D20D7 Local Header Offset   0000A645 (42565)\n+D20DB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1B5D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD20DB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1BDB CENTRAL HEADER #259   02014B50 (33639248)\n-D1BDF Created Zip Spec      14 (20) '2.0'\n-D1BE0 Created OS            03 (3) 'Unix'\n-D1BE1 Extract Zip Spec      14 (20) '2.0'\n-D1BE2 Extract OS            00 (0) 'MS-DOS'\n-D1BE3 General Purpose Flag  0800 (2048)\n+D2159 CENTRAL HEADER #259   02014B50 (33639248)\n+D215D Created Zip Spec      14 (20) '2.0'\n+D215E Created OS            03 (3) 'Unix'\n+D215F Extract Zip Spec      14 (20) '2.0'\n+D2160 Extract OS            00 (0) 'MS-DOS'\n+D2161 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1BE5 Compression Method    0008 (8) 'Deflated'\n-D1BE7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1BEB CRC                   15D4B854 (366262356)\n-D1BEF Compressed Size       000004BB (1211)\n-D1BF3 Uncompressed Size     00000A25 (2597)\n-D1BF7 Filename Length       0082 (130)\n-D1BF9 Extra Length          0000 (0)\n-D1BFB Comment Length        0000 (0)\n-D1BFD Disk Start            0000 (0)\n-D1BFF Int File Attributes   0000 (0)\n+D2163 Compression Method    0008 (8) 'Deflated'\n+D2165 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2169 CRC                   15D4B854 (366262356)\n+D216D Compressed Size       000004BB (1211)\n+D2171 Uncompressed Size     00000A25 (2597)\n+D2175 Filename Length       0082 (130)\n+D2177 Extra Length          0000 (0)\n+D2179 Comment Length        0000 (0)\n+D217B Disk Start            0000 (0)\n+D217D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1C01 Ext File Attributes   81A40000 (2175008768)\n+D217F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1C05 Local Header Offset   0000B030 (45104)\n-D1C09 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2183 Local Header Offset   0000AFFE (45054)\n+D2187 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1C09: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2187: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1C8B CENTRAL HEADER #260   02014B50 (33639248)\n-D1C8F Created Zip Spec      14 (20) '2.0'\n-D1C90 Created OS            03 (3) 'Unix'\n-D1C91 Extract Zip Spec      14 (20) '2.0'\n-D1C92 Extract OS            00 (0) 'MS-DOS'\n-D1C93 General Purpose Flag  0800 (2048)\n+D2209 CENTRAL HEADER #260   02014B50 (33639248)\n+D220D Created Zip Spec      14 (20) '2.0'\n+D220E Created OS            03 (3) 'Unix'\n+D220F Extract Zip Spec      14 (20) '2.0'\n+D2210 Extract OS            00 (0) 'MS-DOS'\n+D2211 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1C95 Compression Method    0008 (8) 'Deflated'\n-D1C97 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1C9B CRC                   826E1CC4 (2188254404)\n-D1C9F Compressed Size       00000DE0 (3552)\n-D1CA3 Uncompressed Size     00002F90 (12176)\n-D1CA7 Filename Length       007B (123)\n-D1CA9 Extra Length          0000 (0)\n-D1CAB Comment Length        0000 (0)\n-D1CAD Disk Start            0000 (0)\n-D1CAF Int File Attributes   0000 (0)\n+D2213 Compression Method    0008 (8) 'Deflated'\n+D2215 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2219 CRC                   826E1CC4 (2188254404)\n+D221D Compressed Size       00000DE0 (3552)\n+D2221 Uncompressed Size     00002F90 (12176)\n+D2225 Filename Length       007B (123)\n+D2227 Extra Length          0000 (0)\n+D2229 Comment Length        0000 (0)\n+D222B Disk Start            0000 (0)\n+D222D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1CB1 Ext File Attributes   81A40000 (2175008768)\n+D222F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1CB5 Local Header Offset   0000B58B (46475)\n-D1CB9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2233 Local Header Offset   0000B559 (46425)\n+D2237 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1CB9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2237: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1D34 CENTRAL HEADER #261   02014B50 (33639248)\n-D1D38 Created Zip Spec      14 (20) '2.0'\n-D1D39 Created OS            03 (3) 'Unix'\n-D1D3A Extract Zip Spec      14 (20) '2.0'\n-D1D3B Extract OS            00 (0) 'MS-DOS'\n-D1D3C General Purpose Flag  0800 (2048)\n+D22B2 CENTRAL HEADER #261   02014B50 (33639248)\n+D22B6 Created Zip Spec      14 (20) '2.0'\n+D22B7 Created OS            03 (3) 'Unix'\n+D22B8 Extract Zip Spec      14 (20) '2.0'\n+D22B9 Extract OS            00 (0) 'MS-DOS'\n+D22BA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1D3E Compression Method    0008 (8) 'Deflated'\n-D1D40 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1D44 CRC                   1BE163AC (467755948)\n-D1D48 Compressed Size       00000476 (1142)\n-D1D4C Uncompressed Size     00000967 (2407)\n-D1D50 Filename Length       0084 (132)\n-D1D52 Extra Length          0000 (0)\n-D1D54 Comment Length        0000 (0)\n-D1D56 Disk Start            0000 (0)\n-D1D58 Int File Attributes   0000 (0)\n+D22BC Compression Method    0008 (8) 'Deflated'\n+D22BE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D22C2 CRC                   1BE163AC (467755948)\n+D22C6 Compressed Size       00000476 (1142)\n+D22CA Uncompressed Size     00000967 (2407)\n+D22CE Filename Length       0084 (132)\n+D22D0 Extra Length          0000 (0)\n+D22D2 Comment Length        0000 (0)\n+D22D4 Disk Start            0000 (0)\n+D22D6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1D5A Ext File Attributes   81A40000 (2175008768)\n+D22D8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1D5E Local Header Offset   0000C404 (50180)\n-D1D62 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D22DC Local Header Offset   0000C3D2 (50130)\n+D22E0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD1D62: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD22E0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1DE6 CENTRAL HEADER #262   02014B50 (33639248)\n-D1DEA Created Zip Spec      14 (20) '2.0'\n-D1DEB Created OS            03 (3) 'Unix'\n-D1DEC Extract Zip Spec      14 (20) '2.0'\n-D1DED Extract OS            00 (0) 'MS-DOS'\n-D1DEE General Purpose Flag  0800 (2048)\n+D2364 CENTRAL HEADER #262   02014B50 (33639248)\n+D2368 Created Zip Spec      14 (20) '2.0'\n+D2369 Created OS            03 (3) 'Unix'\n+D236A Extract Zip Spec      14 (20) '2.0'\n+D236B Extract OS            00 (0) 'MS-DOS'\n+D236C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1DF0 Compression Method    0008 (8) 'Deflated'\n-D1DF2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1DF6 CRC                   11DB1110 (299569424)\n-D1DFA Compressed Size       00000428 (1064)\n-D1DFE Uncompressed Size     0000080F (2063)\n-D1E02 Filename Length       007E (126)\n-D1E04 Extra Length          0000 (0)\n-D1E06 Comment Length        0000 (0)\n-D1E08 Disk Start            0000 (0)\n-D1E0A Int File Attributes   0000 (0)\n+D236E Compression Method    0008 (8) 'Deflated'\n+D2370 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2374 CRC                   11DB1110 (299569424)\n+D2378 Compressed Size       00000428 (1064)\n+D237C Uncompressed Size     0000080F (2063)\n+D2380 Filename Length       007E (126)\n+D2382 Extra Length          0000 (0)\n+D2384 Comment Length        0000 (0)\n+D2386 Disk Start            0000 (0)\n+D2388 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1E0C Ext File Attributes   81A40000 (2175008768)\n+D238A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1E10 Local Header Offset   0000C91C (51484)\n-D1E14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D238E Local Header Offset   0000C8EA (51434)\n+D2392 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1E14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2392: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1E92 CENTRAL HEADER #263   02014B50 (33639248)\n-D1E96 Created Zip Spec      14 (20) '2.0'\n-D1E97 Created OS            03 (3) 'Unix'\n-D1E98 Extract Zip Spec      14 (20) '2.0'\n-D1E99 Extract OS            00 (0) 'MS-DOS'\n-D1E9A General Purpose Flag  0800 (2048)\n+D2410 CENTRAL HEADER #263   02014B50 (33639248)\n+D2414 Created Zip Spec      14 (20) '2.0'\n+D2415 Created OS            03 (3) 'Unix'\n+D2416 Extract Zip Spec      14 (20) '2.0'\n+D2417 Extract OS            00 (0) 'MS-DOS'\n+D2418 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1E9C Compression Method    0008 (8) 'Deflated'\n-D1E9E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1EA2 CRC                   30A69673 (816223859)\n-D1EA6 Compressed Size       000005CE (1486)\n-D1EAA Uncompressed Size     00000C1C (3100)\n-D1EAE Filename Length       007A (122)\n-D1EB0 Extra Length          0000 (0)\n-D1EB2 Comment Length        0000 (0)\n-D1EB4 Disk Start            0000 (0)\n-D1EB6 Int File Attributes   0000 (0)\n+D241A Compression Method    0008 (8) 'Deflated'\n+D241C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2420 CRC                   30A69673 (816223859)\n+D2424 Compressed Size       000005CE (1486)\n+D2428 Uncompressed Size     00000C1C (3100)\n+D242C Filename Length       007A (122)\n+D242E Extra Length          0000 (0)\n+D2430 Comment Length        0000 (0)\n+D2432 Disk Start            0000 (0)\n+D2434 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1EB8 Ext File Attributes   81A40000 (2175008768)\n+D2436 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1EBC Local Header Offset   0000CDE0 (52704)\n-D1EC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D243A Local Header Offset   0000CDAE (52654)\n+D243E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD1EC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD243E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1F3A CENTRAL HEADER #264   02014B50 (33639248)\n-D1F3E Created Zip Spec      14 (20) '2.0'\n-D1F3F Created OS            03 (3) 'Unix'\n-D1F40 Extract Zip Spec      14 (20) '2.0'\n-D1F41 Extract OS            00 (0) 'MS-DOS'\n-D1F42 General Purpose Flag  0800 (2048)\n+D24B8 CENTRAL HEADER #264   02014B50 (33639248)\n+D24BC Created Zip Spec      14 (20) '2.0'\n+D24BD Created OS            03 (3) 'Unix'\n+D24BE Extract Zip Spec      14 (20) '2.0'\n+D24BF Extract OS            00 (0) 'MS-DOS'\n+D24C0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1F44 Compression Method    0008 (8) 'Deflated'\n-D1F46 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1F4A CRC                   0C316B32 (204565298)\n-D1F4E Compressed Size       000003A1 (929)\n-D1F52 Uncompressed Size     000006D7 (1751)\n-D1F56 Filename Length       0084 (132)\n-D1F58 Extra Length          0000 (0)\n-D1F5A Comment Length        0000 (0)\n-D1F5C Disk Start            0000 (0)\n-D1F5E Int File Attributes   0000 (0)\n+D24C2 Compression Method    0008 (8) 'Deflated'\n+D24C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D24C8 CRC                   0C316B32 (204565298)\n+D24CC Compressed Size       000003A1 (929)\n+D24D0 Uncompressed Size     000006D7 (1751)\n+D24D4 Filename Length       0084 (132)\n+D24D6 Extra Length          0000 (0)\n+D24D8 Comment Length        0000 (0)\n+D24DA Disk Start            0000 (0)\n+D24DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D1F60 Ext File Attributes   81A40000 (2175008768)\n+D24DE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D1F64 Local Header Offset   0000D446 (54342)\n-D1F68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D24E2 Local Header Offset   0000D414 (54292)\n+D24E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD1F68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD24E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D1FEC CENTRAL HEADER #265   02014B50 (33639248)\n-D1FF0 Created Zip Spec      14 (20) '2.0'\n-D1FF1 Created OS            03 (3) 'Unix'\n-D1FF2 Extract Zip Spec      14 (20) '2.0'\n-D1FF3 Extract OS            00 (0) 'MS-DOS'\n-D1FF4 General Purpose Flag  0800 (2048)\n+D256A CENTRAL HEADER #265   02014B50 (33639248)\n+D256E Created Zip Spec      14 (20) '2.0'\n+D256F Created OS            03 (3) 'Unix'\n+D2570 Extract Zip Spec      14 (20) '2.0'\n+D2571 Extract OS            00 (0) 'MS-DOS'\n+D2572 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D1FF6 Compression Method    0008 (8) 'Deflated'\n-D1FF8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D1FFC CRC                   37BEEC96 (935259286)\n-D2000 Compressed Size       000006C9 (1737)\n-D2004 Uncompressed Size     0000133B (4923)\n-D2008 Filename Length       0080 (128)\n-D200A Extra Length          0000 (0)\n-D200C Comment Length        0000 (0)\n-D200E Disk Start            0000 (0)\n-D2010 Int File Attributes   0000 (0)\n+D2574 Compression Method    0008 (8) 'Deflated'\n+D2576 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D257A CRC                   37BEEC96 (935259286)\n+D257E Compressed Size       000006C9 (1737)\n+D2582 Uncompressed Size     0000133B (4923)\n+D2586 Filename Length       0080 (128)\n+D2588 Extra Length          0000 (0)\n+D258A Comment Length        0000 (0)\n+D258C Disk Start            0000 (0)\n+D258E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2012 Ext File Attributes   81A40000 (2175008768)\n+D2590 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2016 Local Header Offset   0000D889 (55433)\n-D201A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2594 Local Header Offset   0000D857 (55383)\n+D2598 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD201A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2598: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D209A CENTRAL HEADER #266   02014B50 (33639248)\n-D209E Created Zip Spec      14 (20) '2.0'\n-D209F Created OS            03 (3) 'Unix'\n-D20A0 Extract Zip Spec      14 (20) '2.0'\n-D20A1 Extract OS            00 (0) 'MS-DOS'\n-D20A2 General Purpose Flag  0800 (2048)\n+D2618 CENTRAL HEADER #266   02014B50 (33639248)\n+D261C Created Zip Spec      14 (20) '2.0'\n+D261D Created OS            03 (3) 'Unix'\n+D261E Extract Zip Spec      14 (20) '2.0'\n+D261F Extract OS            00 (0) 'MS-DOS'\n+D2620 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D20A4 Compression Method    0008 (8) 'Deflated'\n-D20A6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D20AA CRC                   D0AE7BE4 (3501095908)\n-D20AE Compressed Size       000003D9 (985)\n-D20B2 Uncompressed Size     0000074C (1868)\n-D20B6 Filename Length       0088 (136)\n-D20B8 Extra Length          0000 (0)\n-D20BA Comment Length        0000 (0)\n-D20BC Disk Start            0000 (0)\n-D20BE Int File Attributes   0000 (0)\n+D2622 Compression Method    0008 (8) 'Deflated'\n+D2624 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2628 CRC                   D0AE7BE4 (3501095908)\n+D262C Compressed Size       000003D9 (985)\n+D2630 Uncompressed Size     0000074C (1868)\n+D2634 Filename Length       0088 (136)\n+D2636 Extra Length          0000 (0)\n+D2638 Comment Length        0000 (0)\n+D263A Disk Start            0000 (0)\n+D263C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D20C0 Ext File Attributes   81A40000 (2175008768)\n+D263E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D20C4 Local Header Offset   0000DFF0 (57328)\n-D20C8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2642 Local Header Offset   0000DFBE (57278)\n+D2646 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0xD20C8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2646: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2150 CENTRAL HEADER #267   02014B50 (33639248)\n-D2154 Created Zip Spec      14 (20) '2.0'\n-D2155 Created OS            03 (3) 'Unix'\n-D2156 Extract Zip Spec      14 (20) '2.0'\n-D2157 Extract OS            00 (0) 'MS-DOS'\n-D2158 General Purpose Flag  0800 (2048)\n+D26CE CENTRAL HEADER #267   02014B50 (33639248)\n+D26D2 Created Zip Spec      14 (20) '2.0'\n+D26D3 Created OS            03 (3) 'Unix'\n+D26D4 Extract Zip Spec      14 (20) '2.0'\n+D26D5 Extract OS            00 (0) 'MS-DOS'\n+D26D6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D215A Compression Method    0008 (8) 'Deflated'\n-D215C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2160 CRC                   4C134CE6 (1276333286)\n-D2164 Compressed Size       000006D5 (1749)\n-D2168 Uncompressed Size     0000103C (4156)\n-D216C Filename Length       0084 (132)\n-D216E Extra Length          0000 (0)\n-D2170 Comment Length        0000 (0)\n-D2172 Disk Start            0000 (0)\n-D2174 Int File Attributes   0000 (0)\n+D26D8 Compression Method    0008 (8) 'Deflated'\n+D26DA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D26DE CRC                   4C134CE6 (1276333286)\n+D26E2 Compressed Size       000006D5 (1749)\n+D26E6 Uncompressed Size     0000103C (4156)\n+D26EA Filename Length       0084 (132)\n+D26EC Extra Length          0000 (0)\n+D26EE Comment Length        0000 (0)\n+D26F0 Disk Start            0000 (0)\n+D26F2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2176 Ext File Attributes   81A40000 (2175008768)\n+D26F4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D217A Local Header Offset   0000E46F (58479)\n-D217E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D26F8 Local Header Offset   0000E43D (58429)\n+D26FC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD217E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD26FC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2202 CENTRAL HEADER #268   02014B50 (33639248)\n-D2206 Created Zip Spec      14 (20) '2.0'\n-D2207 Created OS            03 (3) 'Unix'\n-D2208 Extract Zip Spec      14 (20) '2.0'\n-D2209 Extract OS            00 (0) 'MS-DOS'\n-D220A General Purpose Flag  0800 (2048)\n+D2780 CENTRAL HEADER #268   02014B50 (33639248)\n+D2784 Created Zip Spec      14 (20) '2.0'\n+D2785 Created OS            03 (3) 'Unix'\n+D2786 Extract Zip Spec      14 (20) '2.0'\n+D2787 Extract OS            00 (0) 'MS-DOS'\n+D2788 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D220C Compression Method    0008 (8) 'Deflated'\n-D220E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2212 CRC                   63086228 (1661493800)\n-D2216 Compressed Size       00000430 (1072)\n-D221A Uncompressed Size     00000838 (2104)\n-D221E Filename Length       0086 (134)\n-D2220 Extra Length          0000 (0)\n-D2222 Comment Length        0000 (0)\n-D2224 Disk Start            0000 (0)\n-D2226 Int File Attributes   0000 (0)\n+D278A Compression Method    0008 (8) 'Deflated'\n+D278C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2790 CRC                   63086228 (1661493800)\n+D2794 Compressed Size       00000430 (1072)\n+D2798 Uncompressed Size     00000838 (2104)\n+D279C Filename Length       0086 (134)\n+D279E Extra Length          0000 (0)\n+D27A0 Comment Length        0000 (0)\n+D27A2 Disk Start            0000 (0)\n+D27A4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2228 Ext File Attributes   81A40000 (2175008768)\n+D27A6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D222C Local Header Offset   0000EBE6 (60390)\n-D2230 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D27AA Local Header Offset   0000EBB4 (60340)\n+D27AE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0xD2230: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD27AE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D22B6 CENTRAL HEADER #269   02014B50 (33639248)\n-D22BA Created Zip Spec      14 (20) '2.0'\n-D22BB Created OS            03 (3) 'Unix'\n-D22BC Extract Zip Spec      14 (20) '2.0'\n-D22BD Extract OS            00 (0) 'MS-DOS'\n-D22BE General Purpose Flag  0800 (2048)\n+D2834 CENTRAL HEADER #269   02014B50 (33639248)\n+D2838 Created Zip Spec      14 (20) '2.0'\n+D2839 Created OS            03 (3) 'Unix'\n+D283A Extract Zip Spec      14 (20) '2.0'\n+D283B Extract OS            00 (0) 'MS-DOS'\n+D283C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D22C0 Compression Method    0008 (8) 'Deflated'\n-D22C2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D22C6 CRC                   9EF621C1 (2666930625)\n-D22CA Compressed Size       000005D9 (1497)\n-D22CE Uncompressed Size     00000C90 (3216)\n-D22D2 Filename Length       0082 (130)\n-D22D4 Extra Length          0000 (0)\n-D22D6 Comment Length        0000 (0)\n-D22D8 Disk Start            0000 (0)\n-D22DA Int File Attributes   0000 (0)\n+D283E Compression Method    0008 (8) 'Deflated'\n+D2840 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2844 CRC                   9EF621C1 (2666930625)\n+D2848 Compressed Size       000005D9 (1497)\n+D284C Uncompressed Size     00000C90 (3216)\n+D2850 Filename Length       0082 (130)\n+D2852 Extra Length          0000 (0)\n+D2854 Comment Length        0000 (0)\n+D2856 Disk Start            0000 (0)\n+D2858 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D22DC Ext File Attributes   81A40000 (2175008768)\n+D285A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D22E0 Local Header Offset   0000F0BA (61626)\n-D22E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D285E Local Header Offset   0000F088 (61576)\n+D2862 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD22E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2862: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2366 CENTRAL HEADER #270   02014B50 (33639248)\n-D236A Created Zip Spec      14 (20) '2.0'\n-D236B Created OS            03 (3) 'Unix'\n-D236C Extract Zip Spec      14 (20) '2.0'\n-D236D Extract OS            00 (0) 'MS-DOS'\n-D236E General Purpose Flag  0800 (2048)\n+D28E4 CENTRAL HEADER #270   02014B50 (33639248)\n+D28E8 Created Zip Spec      14 (20) '2.0'\n+D28E9 Created OS            03 (3) 'Unix'\n+D28EA Extract Zip Spec      14 (20) '2.0'\n+D28EB Extract OS            00 (0) 'MS-DOS'\n+D28EC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2370 Compression Method    0008 (8) 'Deflated'\n-D2372 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2376 CRC                   6BE0FFE8 (1809907688)\n-D237A Compressed Size       00000687 (1671)\n-D237E Uncompressed Size     00000EF6 (3830)\n-D2382 Filename Length       006A (106)\n-D2384 Extra Length          0000 (0)\n-D2386 Comment Length        0000 (0)\n-D2388 Disk Start            0000 (0)\n-D238A Int File Attributes   0000 (0)\n+D28EE Compression Method    0008 (8) 'Deflated'\n+D28F0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D28F4 CRC                   6BE0FFE8 (1809907688)\n+D28F8 Compressed Size       00000687 (1671)\n+D28FC Uncompressed Size     00000EF6 (3830)\n+D2900 Filename Length       006A (106)\n+D2902 Extra Length          0000 (0)\n+D2904 Comment Length        0000 (0)\n+D2906 Disk Start            0000 (0)\n+D2908 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D238C Ext File Attributes   81A40000 (2175008768)\n+D290A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2390 Local Header Offset   0000F733 (63283)\n-D2394 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D290E Local Header Offset   0000F701 (63233)\n+D2912 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2394: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2912: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D23FE CENTRAL HEADER #271   02014B50 (33639248)\n-D2402 Created Zip Spec      14 (20) '2.0'\n-D2403 Created OS            03 (3) 'Unix'\n-D2404 Extract Zip Spec      14 (20) '2.0'\n-D2405 Extract OS            00 (0) 'MS-DOS'\n-D2406 General Purpose Flag  0800 (2048)\n+D297C CENTRAL HEADER #271   02014B50 (33639248)\n+D2980 Created Zip Spec      14 (20) '2.0'\n+D2981 Created OS            03 (3) 'Unix'\n+D2982 Extract Zip Spec      14 (20) '2.0'\n+D2983 Extract OS            00 (0) 'MS-DOS'\n+D2984 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2408 Compression Method    0008 (8) 'Deflated'\n-D240A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D240E CRC                   8743913D (2269352253)\n-D2412 Compressed Size       000005DE (1502)\n-D2416 Uncompressed Size     00000C44 (3140)\n-D241A Filename Length       006F (111)\n-D241C Extra Length          0000 (0)\n-D241E Comment Length        0000 (0)\n-D2420 Disk Start            0000 (0)\n-D2422 Int File Attributes   0000 (0)\n+D2986 Compression Method    0008 (8) 'Deflated'\n+D2988 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D298C CRC                   8743913D (2269352253)\n+D2990 Compressed Size       000005DE (1502)\n+D2994 Uncompressed Size     00000C44 (3140)\n+D2998 Filename Length       006F (111)\n+D299A Extra Length          0000 (0)\n+D299C Comment Length        0000 (0)\n+D299E Disk Start            0000 (0)\n+D29A0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2424 Ext File Attributes   81A40000 (2175008768)\n+D29A2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2428 Local Header Offset   0000FE42 (65090)\n-D242C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D29A6 Local Header Offset   0000FE10 (65040)\n+D29AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD242C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD29AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D249B CENTRAL HEADER #272   02014B50 (33639248)\n-D249F Created Zip Spec      14 (20) '2.0'\n-D24A0 Created OS            03 (3) 'Unix'\n-D24A1 Extract Zip Spec      14 (20) '2.0'\n-D24A2 Extract OS            00 (0) 'MS-DOS'\n-D24A3 General Purpose Flag  0800 (2048)\n+D2A19 CENTRAL HEADER #272   02014B50 (33639248)\n+D2A1D Created Zip Spec      14 (20) '2.0'\n+D2A1E Created OS            03 (3) 'Unix'\n+D2A1F Extract Zip Spec      14 (20) '2.0'\n+D2A20 Extract OS            00 (0) 'MS-DOS'\n+D2A21 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D24A5 Compression Method    0008 (8) 'Deflated'\n-D24A7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D24AB CRC                   07A59EC9 (128294601)\n-D24AF Compressed Size       000004D1 (1233)\n-D24B3 Uncompressed Size     00000C29 (3113)\n-D24B7 Filename Length       008A (138)\n-D24B9 Extra Length          0000 (0)\n-D24BB Comment Length        0000 (0)\n-D24BD Disk Start            0000 (0)\n-D24BF Int File Attributes   0000 (0)\n+D2A23 Compression Method    0008 (8) 'Deflated'\n+D2A25 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2A29 CRC                   07A59EC9 (128294601)\n+D2A2D Compressed Size       000004D1 (1233)\n+D2A31 Uncompressed Size     00000C29 (3113)\n+D2A35 Filename Length       008A (138)\n+D2A37 Extra Length          0000 (0)\n+D2A39 Comment Length        0000 (0)\n+D2A3B Disk Start            0000 (0)\n+D2A3D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D24C1 Ext File Attributes   81A40000 (2175008768)\n+D2A3F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D24C5 Local Header Offset   000104AD (66733)\n-D24C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2A43 Local Header Offset   0001047B (66683)\n+D2A47 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXX'\n #\n-# WARNING: Offset 0xD24C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2A47: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2553 CENTRAL HEADER #273   02014B50 (33639248)\n-D2557 Created Zip Spec      14 (20) '2.0'\n-D2558 Created OS            03 (3) 'Unix'\n-D2559 Extract Zip Spec      14 (20) '2.0'\n-D255A Extract OS            00 (0) 'MS-DOS'\n-D255B General Purpose Flag  0800 (2048)\n+D2AD1 CENTRAL HEADER #273   02014B50 (33639248)\n+D2AD5 Created Zip Spec      14 (20) '2.0'\n+D2AD6 Created OS            03 (3) 'Unix'\n+D2AD7 Extract Zip Spec      14 (20) '2.0'\n+D2AD8 Extract OS            00 (0) 'MS-DOS'\n+D2AD9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D255D Compression Method    0008 (8) 'Deflated'\n-D255F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2563 CRC                   FD79F819 (4252629017)\n-D2567 Compressed Size       00000498 (1176)\n-D256B Uncompressed Size     00000A3A (2618)\n-D256F Filename Length       0089 (137)\n-D2571 Extra Length          0000 (0)\n-D2573 Comment Length        0000 (0)\n-D2575 Disk Start            0000 (0)\n-D2577 Int File Attributes   0000 (0)\n+D2ADB Compression Method    0008 (8) 'Deflated'\n+D2ADD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2AE1 CRC                   FD79F819 (4252629017)\n+D2AE5 Compressed Size       00000498 (1176)\n+D2AE9 Uncompressed Size     00000A3A (2618)\n+D2AED Filename Length       0089 (137)\n+D2AEF Extra Length          0000 (0)\n+D2AF1 Comment Length        0000 (0)\n+D2AF3 Disk Start            0000 (0)\n+D2AF5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2579 Ext File Attributes   81A40000 (2175008768)\n+D2AF7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D257D Local Header Offset   00010A26 (68134)\n-D2581 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2AFB Local Header Offset   000109F4 (68084)\n+D2AFF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXX'\n #\n-# WARNING: Offset 0xD2581: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2AFF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D260A CENTRAL HEADER #274   02014B50 (33639248)\n-D260E Created Zip Spec      14 (20) '2.0'\n-D260F Created OS            03 (3) 'Unix'\n-D2610 Extract Zip Spec      14 (20) '2.0'\n-D2611 Extract OS            00 (0) 'MS-DOS'\n-D2612 General Purpose Flag  0800 (2048)\n+D2B88 CENTRAL HEADER #274   02014B50 (33639248)\n+D2B8C Created Zip Spec      14 (20) '2.0'\n+D2B8D Created OS            03 (3) 'Unix'\n+D2B8E Extract Zip Spec      14 (20) '2.0'\n+D2B8F Extract OS            00 (0) 'MS-DOS'\n+D2B90 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2614 Compression Method    0008 (8) 'Deflated'\n-D2616 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D261A CRC                   63D24DDE (1674726878)\n-D261E Compressed Size       0000046A (1130)\n-D2622 Uncompressed Size     00000E46 (3654)\n-D2626 Filename Length       0084 (132)\n-D2628 Extra Length          0000 (0)\n-D262A Comment Length        0000 (0)\n-D262C Disk Start            0000 (0)\n-D262E Int File Attributes   0000 (0)\n+D2B92 Compression Method    0008 (8) 'Deflated'\n+D2B94 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2B98 CRC                   63D24DDE (1674726878)\n+D2B9C Compressed Size       0000046A (1130)\n+D2BA0 Uncompressed Size     00000E46 (3654)\n+D2BA4 Filename Length       0084 (132)\n+D2BA6 Extra Length          0000 (0)\n+D2BA8 Comment Length        0000 (0)\n+D2BAA Disk Start            0000 (0)\n+D2BAC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2630 Ext File Attributes   81A40000 (2175008768)\n+D2BAE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2634 Local Header Offset   00010F65 (69477)\n-D2638 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2BB2 Local Header Offset   00010F33 (69427)\n+D2BB6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD2638: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2BB6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D26BC CENTRAL HEADER #275   02014B50 (33639248)\n-D26C0 Created Zip Spec      14 (20) '2.0'\n-D26C1 Created OS            03 (3) 'Unix'\n-D26C2 Extract Zip Spec      14 (20) '2.0'\n-D26C3 Extract OS            00 (0) 'MS-DOS'\n-D26C4 General Purpose Flag  0800 (2048)\n+D2C3A CENTRAL HEADER #275   02014B50 (33639248)\n+D2C3E Created Zip Spec      14 (20) '2.0'\n+D2C3F Created OS            03 (3) 'Unix'\n+D2C40 Extract Zip Spec      14 (20) '2.0'\n+D2C41 Extract OS            00 (0) 'MS-DOS'\n+D2C42 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D26C6 Compression Method    0008 (8) 'Deflated'\n-D26C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D26CC CRC                   2E17013D (773259581)\n-D26D0 Compressed Size       0000043F (1087)\n-D26D4 Uncompressed Size     00000888 (2184)\n-D26D8 Filename Length       008B (139)\n-D26DA Extra Length          0000 (0)\n-D26DC Comment Length        0000 (0)\n-D26DE Disk Start            0000 (0)\n-D26E0 Int File Attributes   0000 (0)\n+D2C44 Compression Method    0008 (8) 'Deflated'\n+D2C46 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2C4A CRC                   2E17013D (773259581)\n+D2C4E Compressed Size       0000043F (1087)\n+D2C52 Uncompressed Size     00000888 (2184)\n+D2C56 Filename Length       008B (139)\n+D2C58 Extra Length          0000 (0)\n+D2C5A Comment Length        0000 (0)\n+D2C5C Disk Start            0000 (0)\n+D2C5E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D26E2 Ext File Attributes   81A40000 (2175008768)\n+D2C60 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D26E6 Local Header Offset   00011471 (70769)\n-D26EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2C64 Local Header Offset   0001143F (70719)\n+D2C68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXX'\n #\n-# WARNING: Offset 0xD26EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2C68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2775 CENTRAL HEADER #276   02014B50 (33639248)\n-D2779 Created Zip Spec      14 (20) '2.0'\n-D277A Created OS            03 (3) 'Unix'\n-D277B Extract Zip Spec      14 (20) '2.0'\n-D277C Extract OS            00 (0) 'MS-DOS'\n-D277D General Purpose Flag  0800 (2048)\n+D2CF3 CENTRAL HEADER #276   02014B50 (33639248)\n+D2CF7 Created Zip Spec      14 (20) '2.0'\n+D2CF8 Created OS            03 (3) 'Unix'\n+D2CF9 Extract Zip Spec      14 (20) '2.0'\n+D2CFA Extract OS            00 (0) 'MS-DOS'\n+D2CFB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D277F Compression Method    0008 (8) 'Deflated'\n-D2781 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2785 CRC                   C1E5A225 (3253051941)\n-D2789 Compressed Size       000003A3 (931)\n-D278D Uncompressed Size     0000070B (1803)\n-D2791 Filename Length       006D (109)\n-D2793 Extra Length          0000 (0)\n-D2795 Comment Length        0000 (0)\n-D2797 Disk Start            0000 (0)\n-D2799 Int File Attributes   0000 (0)\n+D2CFD Compression Method    0008 (8) 'Deflated'\n+D2CFF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2D03 CRC                   C1E5A225 (3253051941)\n+D2D07 Compressed Size       000003A3 (931)\n+D2D0B Uncompressed Size     0000070B (1803)\n+D2D0F Filename Length       006D (109)\n+D2D11 Extra Length          0000 (0)\n+D2D13 Comment Length        0000 (0)\n+D2D15 Disk Start            0000 (0)\n+D2D17 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D279B Ext File Attributes   81A40000 (2175008768)\n+D2D19 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D279F Local Header Offset   00011959 (72025)\n-D27A3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2D1D Local Header Offset   00011927 (71975)\n+D2D21 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD27A3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2D21: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2810 CENTRAL HEADER #277   02014B50 (33639248)\n-D2814 Created Zip Spec      14 (20) '2.0'\n-D2815 Created OS            03 (3) 'Unix'\n-D2816 Extract Zip Spec      14 (20) '2.0'\n-D2817 Extract OS            00 (0) 'MS-DOS'\n-D2818 General Purpose Flag  0800 (2048)\n+D2D8E CENTRAL HEADER #277   02014B50 (33639248)\n+D2D92 Created Zip Spec      14 (20) '2.0'\n+D2D93 Created OS            03 (3) 'Unix'\n+D2D94 Extract Zip Spec      14 (20) '2.0'\n+D2D95 Extract OS            00 (0) 'MS-DOS'\n+D2D96 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D281A Compression Method    0008 (8) 'Deflated'\n-D281C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2820 CRC                   8950733E (2303750974)\n-D2824 Compressed Size       00000350 (848)\n-D2828 Uncompressed Size     0000064D (1613)\n-D282C Filename Length       006C (108)\n-D282E Extra Length          0000 (0)\n-D2830 Comment Length        0000 (0)\n-D2832 Disk Start            0000 (0)\n-D2834 Int File Attributes   0000 (0)\n+D2D98 Compression Method    0008 (8) 'Deflated'\n+D2D9A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2D9E CRC                   8950733E (2303750974)\n+D2DA2 Compressed Size       00000350 (848)\n+D2DA6 Uncompressed Size     0000064D (1613)\n+D2DAA Filename Length       006C (108)\n+D2DAC Extra Length          0000 (0)\n+D2DAE Comment Length        0000 (0)\n+D2DB0 Disk Start            0000 (0)\n+D2DB2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2836 Ext File Attributes   81A40000 (2175008768)\n+D2DB4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D283A Local Header Offset   00011D87 (73095)\n-D283E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2DB8 Local Header Offset   00011D55 (73045)\n+D2DBC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD283E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2DBC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D28AA CENTRAL HEADER #278   02014B50 (33639248)\n-D28AE Created Zip Spec      14 (20) '2.0'\n-D28AF Created OS            03 (3) 'Unix'\n-D28B0 Extract Zip Spec      14 (20) '2.0'\n-D28B1 Extract OS            00 (0) 'MS-DOS'\n-D28B2 General Purpose Flag  0800 (2048)\n+D2E28 CENTRAL HEADER #278   02014B50 (33639248)\n+D2E2C Created Zip Spec      14 (20) '2.0'\n+D2E2D Created OS            03 (3) 'Unix'\n+D2E2E Extract Zip Spec      14 (20) '2.0'\n+D2E2F Extract OS            00 (0) 'MS-DOS'\n+D2E30 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D28B4 Compression Method    0008 (8) 'Deflated'\n-D28B6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D28BA CRC                   A0157ABE (2685762238)\n-D28BE Compressed Size       0000034B (843)\n-D28C2 Uncompressed Size     00000643 (1603)\n-D28C6 Filename Length       006B (107)\n-D28C8 Extra Length          0000 (0)\n-D28CA Comment Length        0000 (0)\n-D28CC Disk Start            0000 (0)\n-D28CE Int File Attributes   0000 (0)\n+D2E32 Compression Method    0008 (8) 'Deflated'\n+D2E34 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2E38 CRC                   A0157ABE (2685762238)\n+D2E3C Compressed Size       0000034B (843)\n+D2E40 Uncompressed Size     00000643 (1603)\n+D2E44 Filename Length       006B (107)\n+D2E46 Extra Length          0000 (0)\n+D2E48 Comment Length        0000 (0)\n+D2E4A Disk Start            0000 (0)\n+D2E4C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D28D0 Ext File Attributes   81A40000 (2175008768)\n+D2E4E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D28D4 Local Header Offset   00012161 (74081)\n-D28D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2E52 Local Header Offset   0001212F (74031)\n+D2E56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD28D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2E56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2943 CENTRAL HEADER #279   02014B50 (33639248)\n-D2947 Created Zip Spec      14 (20) '2.0'\n-D2948 Created OS            03 (3) 'Unix'\n-D2949 Extract Zip Spec      14 (20) '2.0'\n-D294A Extract OS            00 (0) 'MS-DOS'\n-D294B General Purpose Flag  0800 (2048)\n+D2EC1 CENTRAL HEADER #279   02014B50 (33639248)\n+D2EC5 Created Zip Spec      14 (20) '2.0'\n+D2EC6 Created OS            03 (3) 'Unix'\n+D2EC7 Extract Zip Spec      14 (20) '2.0'\n+D2EC8 Extract OS            00 (0) 'MS-DOS'\n+D2EC9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D294D Compression Method    0008 (8) 'Deflated'\n-D294F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2953 CRC                   164EC61D (374261277)\n-D2957 Compressed Size       0000054E (1358)\n-D295B Uncompressed Size     00000B15 (2837)\n-D295F Filename Length       0091 (145)\n-D2961 Extra Length          0000 (0)\n-D2963 Comment Length        0000 (0)\n-D2965 Disk Start            0000 (0)\n-D2967 Int File Attributes   0000 (0)\n+D2ECB Compression Method    0008 (8) 'Deflated'\n+D2ECD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2ED1 CRC                   164EC61D (374261277)\n+D2ED5 Compressed Size       0000054E (1358)\n+D2ED9 Uncompressed Size     00000B15 (2837)\n+D2EDD Filename Length       0091 (145)\n+D2EDF Extra Length          0000 (0)\n+D2EE1 Comment Length        0000 (0)\n+D2EE3 Disk Start            0000 (0)\n+D2EE5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2969 Ext File Attributes   81A40000 (2175008768)\n+D2EE7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D296D Local Header Offset   00012535 (75061)\n-D2971 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D2EEB Local Header Offset   00012503 (75011)\n+D2EEF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2971: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2EEF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2A02 CENTRAL HEADER #280   02014B50 (33639248)\n-D2A06 Created Zip Spec      14 (20) '2.0'\n-D2A07 Created OS            03 (3) 'Unix'\n-D2A08 Extract Zip Spec      14 (20) '2.0'\n-D2A09 Extract OS            00 (0) 'MS-DOS'\n-D2A0A General Purpose Flag  0800 (2048)\n+D2F80 CENTRAL HEADER #280   02014B50 (33639248)\n+D2F84 Created Zip Spec      14 (20) '2.0'\n+D2F85 Created OS            03 (3) 'Unix'\n+D2F86 Extract Zip Spec      14 (20) '2.0'\n+D2F87 Extract OS            00 (0) 'MS-DOS'\n+D2F88 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2A0C Compression Method    0008 (8) 'Deflated'\n-D2A0E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2A12 CRC                   4F9A1C4F (1335499855)\n-D2A16 Compressed Size       000003FB (1019)\n-D2A1A Uncompressed Size     000009AF (2479)\n-D2A1E Filename Length       0075 (117)\n-D2A20 Extra Length          0000 (0)\n-D2A22 Comment Length        0000 (0)\n-D2A24 Disk Start            0000 (0)\n-D2A26 Int File Attributes   0000 (0)\n+D2F8A Compression Method    0008 (8) 'Deflated'\n+D2F8C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D2F90 CRC                   4F9A1C4F (1335499855)\n+D2F94 Compressed Size       000003FB (1019)\n+D2F98 Uncompressed Size     000009AF (2479)\n+D2F9C Filename Length       0075 (117)\n+D2F9E Extra Length          0000 (0)\n+D2FA0 Comment Length        0000 (0)\n+D2FA2 Disk Start            0000 (0)\n+D2FA4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2A28 Ext File Attributes   81A40000 (2175008768)\n+D2FA6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2A2C Local Header Offset   00012B32 (76594)\n-D2A30 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D2FAA Local Header Offset   00012B00 (76544)\n+D2FAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2A30: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD2FAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2AA5 CENTRAL HEADER #281   02014B50 (33639248)\n-D2AA9 Created Zip Spec      14 (20) '2.0'\n-D2AAA Created OS            03 (3) 'Unix'\n-D2AAB Extract Zip Spec      14 (20) '2.0'\n-D2AAC Extract OS            00 (0) 'MS-DOS'\n-D2AAD General Purpose Flag  0800 (2048)\n+D3023 CENTRAL HEADER #281   02014B50 (33639248)\n+D3027 Created Zip Spec      14 (20) '2.0'\n+D3028 Created OS            03 (3) 'Unix'\n+D3029 Extract Zip Spec      14 (20) '2.0'\n+D302A Extract OS            00 (0) 'MS-DOS'\n+D302B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2AAF Compression Method    0008 (8) 'Deflated'\n-D2AB1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2AB5 CRC                   754F4527 (1968129319)\n-D2AB9 Compressed Size       00000573 (1395)\n-D2ABD Uncompressed Size     00001265 (4709)\n-D2AC1 Filename Length       0082 (130)\n-D2AC3 Extra Length          0000 (0)\n-D2AC5 Comment Length        0000 (0)\n-D2AC7 Disk Start            0000 (0)\n-D2AC9 Int File Attributes   0000 (0)\n+D302D Compression Method    0008 (8) 'Deflated'\n+D302F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3033 CRC                   754F4527 (1968129319)\n+D3037 Compressed Size       00000573 (1395)\n+D303B Uncompressed Size     00001265 (4709)\n+D303F Filename Length       0082 (130)\n+D3041 Extra Length          0000 (0)\n+D3043 Comment Length        0000 (0)\n+D3045 Disk Start            0000 (0)\n+D3047 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2ACB Ext File Attributes   81A40000 (2175008768)\n+D3049 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2ACF Local Header Offset   00012FC0 (77760)\n-D2AD3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D304D Local Header Offset   00012F8E (77710)\n+D3051 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2AD3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3051: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2B55 CENTRAL HEADER #282   02014B50 (33639248)\n-D2B59 Created Zip Spec      14 (20) '2.0'\n-D2B5A Created OS            03 (3) 'Unix'\n-D2B5B Extract Zip Spec      14 (20) '2.0'\n-D2B5C Extract OS            00 (0) 'MS-DOS'\n-D2B5D General Purpose Flag  0800 (2048)\n+D30D3 CENTRAL HEADER #282   02014B50 (33639248)\n+D30D7 Created Zip Spec      14 (20) '2.0'\n+D30D8 Created OS            03 (3) 'Unix'\n+D30D9 Extract Zip Spec      14 (20) '2.0'\n+D30DA Extract OS            00 (0) 'MS-DOS'\n+D30DB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2B5F Compression Method    0008 (8) 'Deflated'\n-D2B61 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2B65 CRC                   896578EC (2305128684)\n-D2B69 Compressed Size       00000746 (1862)\n-D2B6D Uncompressed Size     00001327 (4903)\n-D2B71 Filename Length       0090 (144)\n-D2B73 Extra Length          0000 (0)\n-D2B75 Comment Length        0000 (0)\n-D2B77 Disk Start            0000 (0)\n-D2B79 Int File Attributes   0000 (0)\n+D30DD Compression Method    0008 (8) 'Deflated'\n+D30DF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D30E3 CRC                   896578EC (2305128684)\n+D30E7 Compressed Size       00000746 (1862)\n+D30EB Uncompressed Size     00001327 (4903)\n+D30EF Filename Length       0090 (144)\n+D30F1 Extra Length          0000 (0)\n+D30F3 Comment Length        0000 (0)\n+D30F5 Disk Start            0000 (0)\n+D30F7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2B7B Ext File Attributes   81A40000 (2175008768)\n+D30F9 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2B7F Local Header Offset   000135D3 (79315)\n-D2B83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D30FD Local Header Offset   000135A1 (79265)\n+D3101 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2B83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3101: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2C13 CENTRAL HEADER #283   02014B50 (33639248)\n-D2C17 Created Zip Spec      14 (20) '2.0'\n-D2C18 Created OS            03 (3) 'Unix'\n-D2C19 Extract Zip Spec      14 (20) '2.0'\n-D2C1A Extract OS            00 (0) 'MS-DOS'\n-D2C1B General Purpose Flag  0800 (2048)\n+D3191 CENTRAL HEADER #283   02014B50 (33639248)\n+D3195 Created Zip Spec      14 (20) '2.0'\n+D3196 Created OS            03 (3) 'Unix'\n+D3197 Extract Zip Spec      14 (20) '2.0'\n+D3198 Extract OS            00 (0) 'MS-DOS'\n+D3199 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2C1D Compression Method    0008 (8) 'Deflated'\n-D2C1F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2C23 CRC                   64624734 (1684162356)\n-D2C27 Compressed Size       0000063D (1597)\n-D2C2B Uncompressed Size     00000D24 (3364)\n-D2C2F Filename Length       0097 (151)\n-D2C31 Extra Length          0000 (0)\n-D2C33 Comment Length        0000 (0)\n-D2C35 Disk Start            0000 (0)\n-D2C37 Int File Attributes   0000 (0)\n+D319B Compression Method    0008 (8) 'Deflated'\n+D319D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D31A1 CRC                   64624734 (1684162356)\n+D31A5 Compressed Size       0000063D (1597)\n+D31A9 Uncompressed Size     00000D24 (3364)\n+D31AD Filename Length       0097 (151)\n+D31AF Extra Length          0000 (0)\n+D31B1 Comment Length        0000 (0)\n+D31B3 Disk Start            0000 (0)\n+D31B5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2C39 Ext File Attributes   81A40000 (2175008768)\n+D31B7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2C3D Local Header Offset   00013DC7 (81351)\n-D2C41 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D31BB Local Header Offset   00013D95 (81301)\n+D31BF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2C41: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD31BF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2CD8 CENTRAL HEADER #284   02014B50 (33639248)\n-D2CDC Created Zip Spec      14 (20) '2.0'\n-D2CDD Created OS            03 (3) 'Unix'\n-D2CDE Extract Zip Spec      14 (20) '2.0'\n-D2CDF Extract OS            00 (0) 'MS-DOS'\n-D2CE0 General Purpose Flag  0800 (2048)\n+D3256 CENTRAL HEADER #284   02014B50 (33639248)\n+D325A Created Zip Spec      14 (20) '2.0'\n+D325B Created OS            03 (3) 'Unix'\n+D325C Extract Zip Spec      14 (20) '2.0'\n+D325D Extract OS            00 (0) 'MS-DOS'\n+D325E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2CE2 Compression Method    0008 (8) 'Deflated'\n-D2CE4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2CE8 CRC                   2B6EF697 (728692375)\n-D2CEC Compressed Size       00000444 (1092)\n-D2CF0 Uncompressed Size     000008CD (2253)\n-D2CF4 Filename Length       0093 (147)\n-D2CF6 Extra Length          0000 (0)\n-D2CF8 Comment Length        0000 (0)\n-D2CFA Disk Start            0000 (0)\n-D2CFC Int File Attributes   0000 (0)\n+D3260 Compression Method    0008 (8) 'Deflated'\n+D3262 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3266 CRC                   2B6EF697 (728692375)\n+D326A Compressed Size       00000444 (1092)\n+D326E Uncompressed Size     000008CD (2253)\n+D3272 Filename Length       0093 (147)\n+D3274 Extra Length          0000 (0)\n+D3276 Comment Length        0000 (0)\n+D3278 Disk Start            0000 (0)\n+D327A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2CFE Ext File Attributes   81A40000 (2175008768)\n+D327C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2D02 Local Header Offset   000144B9 (83129)\n-D2D06 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3280 Local Header Offset   00014487 (83079)\n+D3284 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2D06: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3284: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2D99 CENTRAL HEADER #285   02014B50 (33639248)\n-D2D9D Created Zip Spec      14 (20) '2.0'\n-D2D9E Created OS            03 (3) 'Unix'\n-D2D9F Extract Zip Spec      14 (20) '2.0'\n-D2DA0 Extract OS            00 (0) 'MS-DOS'\n-D2DA1 General Purpose Flag  0800 (2048)\n+D3317 CENTRAL HEADER #285   02014B50 (33639248)\n+D331B Created Zip Spec      14 (20) '2.0'\n+D331C Created OS            03 (3) 'Unix'\n+D331D Extract Zip Spec      14 (20) '2.0'\n+D331E Extract OS            00 (0) 'MS-DOS'\n+D331F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2DA3 Compression Method    0008 (8) 'Deflated'\n-D2DA5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2DA9 CRC                   DBC79151 (3687289169)\n-D2DAD Compressed Size       00000874 (2164)\n-D2DB1 Uncompressed Size     000013B1 (5041)\n-D2DB5 Filename Length       0091 (145)\n-D2DB7 Extra Length          0000 (0)\n-D2DB9 Comment Length        0000 (0)\n-D2DBB Disk Start            0000 (0)\n-D2DBD Int File Attributes   0000 (0)\n+D3321 Compression Method    0008 (8) 'Deflated'\n+D3323 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3327 CRC                   DBC79151 (3687289169)\n+D332B Compressed Size       00000874 (2164)\n+D332F Uncompressed Size     000013B1 (5041)\n+D3333 Filename Length       0091 (145)\n+D3335 Extra Length          0000 (0)\n+D3337 Comment Length        0000 (0)\n+D3339 Disk Start            0000 (0)\n+D333B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2DBF Ext File Attributes   81A40000 (2175008768)\n+D333D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2DC3 Local Header Offset   000149AE (84398)\n-D2DC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3341 Local Header Offset   0001497C (84348)\n+D3345 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2DC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3345: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2E58 CENTRAL HEADER #286   02014B50 (33639248)\n-D2E5C Created Zip Spec      14 (20) '2.0'\n-D2E5D Created OS            03 (3) 'Unix'\n-D2E5E Extract Zip Spec      14 (20) '2.0'\n-D2E5F Extract OS            00 (0) 'MS-DOS'\n-D2E60 General Purpose Flag  0800 (2048)\n+D33D6 CENTRAL HEADER #286   02014B50 (33639248)\n+D33DA Created Zip Spec      14 (20) '2.0'\n+D33DB Created OS            03 (3) 'Unix'\n+D33DC Extract Zip Spec      14 (20) '2.0'\n+D33DD Extract OS            00 (0) 'MS-DOS'\n+D33DE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2E62 Compression Method    0008 (8) 'Deflated'\n-D2E64 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2E68 CRC                   9AFFB21B (2600448539)\n-D2E6C Compressed Size       0000033F (831)\n-D2E70 Uncompressed Size     0000064E (1614)\n-D2E74 Filename Length       0097 (151)\n-D2E76 Extra Length          0000 (0)\n-D2E78 Comment Length        0000 (0)\n-D2E7A Disk Start            0000 (0)\n-D2E7C Int File Attributes   0000 (0)\n+D33E0 Compression Method    0008 (8) 'Deflated'\n+D33E2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D33E6 CRC                   9AFFB21B (2600448539)\n+D33EA Compressed Size       0000033F (831)\n+D33EE Uncompressed Size     0000064E (1614)\n+D33F2 Filename Length       0097 (151)\n+D33F4 Extra Length          0000 (0)\n+D33F6 Comment Length        0000 (0)\n+D33F8 Disk Start            0000 (0)\n+D33FA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2E7E Ext File Attributes   81A40000 (2175008768)\n+D33FC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2E82 Local Header Offset   000152D1 (86737)\n-D2E86 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3400 Local Header Offset   0001529F (86687)\n+D3404 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2E86: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3404: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2F1D CENTRAL HEADER #287   02014B50 (33639248)\n-D2F21 Created Zip Spec      14 (20) '2.0'\n-D2F22 Created OS            03 (3) 'Unix'\n-D2F23 Extract Zip Spec      14 (20) '2.0'\n-D2F24 Extract OS            00 (0) 'MS-DOS'\n-D2F25 General Purpose Flag  0800 (2048)\n+D349B CENTRAL HEADER #287   02014B50 (33639248)\n+D349F Created Zip Spec      14 (20) '2.0'\n+D34A0 Created OS            03 (3) 'Unix'\n+D34A1 Extract Zip Spec      14 (20) '2.0'\n+D34A2 Extract OS            00 (0) 'MS-DOS'\n+D34A3 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2F27 Compression Method    0008 (8) 'Deflated'\n-D2F29 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2F2D CRC                   88CF36AA (2295281322)\n-D2F31 Compressed Size       000004BC (1212)\n-D2F35 Uncompressed Size     00000A4F (2639)\n-D2F39 Filename Length       0093 (147)\n-D2F3B Extra Length          0000 (0)\n-D2F3D Comment Length        0000 (0)\n-D2F3F Disk Start            0000 (0)\n-D2F41 Int File Attributes   0000 (0)\n+D34A5 Compression Method    0008 (8) 'Deflated'\n+D34A7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D34AB CRC                   88CF36AA (2295281322)\n+D34AF Compressed Size       000004BC (1212)\n+D34B3 Uncompressed Size     00000A4F (2639)\n+D34B7 Filename Length       0093 (147)\n+D34B9 Extra Length          0000 (0)\n+D34BB Comment Length        0000 (0)\n+D34BD Disk Start            0000 (0)\n+D34BF Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D2F43 Ext File Attributes   81A40000 (2175008768)\n+D34C1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D2F47 Local Header Offset   000156C5 (87749)\n-D2F4B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D34C5 Local Header Offset   00015693 (87699)\n+D34C9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD2F4B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD34C9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D2FDE CENTRAL HEADER #288   02014B50 (33639248)\n-D2FE2 Created Zip Spec      14 (20) '2.0'\n-D2FE3 Created OS            03 (3) 'Unix'\n-D2FE4 Extract Zip Spec      14 (20) '2.0'\n-D2FE5 Extract OS            00 (0) 'MS-DOS'\n-D2FE6 General Purpose Flag  0800 (2048)\n+D355C CENTRAL HEADER #288   02014B50 (33639248)\n+D3560 Created Zip Spec      14 (20) '2.0'\n+D3561 Created OS            03 (3) 'Unix'\n+D3562 Extract Zip Spec      14 (20) '2.0'\n+D3563 Extract OS            00 (0) 'MS-DOS'\n+D3564 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D2FE8 Compression Method    0008 (8) 'Deflated'\n-D2FEA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D2FEE CRC                   9593555C (2509460828)\n-D2FF2 Compressed Size       000005DA (1498)\n-D2FF6 Uncompressed Size     00000D05 (3333)\n-D2FFA Filename Length       009C (156)\n-D2FFC Extra Length          0000 (0)\n-D2FFE Comment Length        0000 (0)\n-D3000 Disk Start            0000 (0)\n-D3002 Int File Attributes   0000 (0)\n+D3566 Compression Method    0008 (8) 'Deflated'\n+D3568 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D356C CRC                   9593555C (2509460828)\n+D3570 Compressed Size       000005DA (1498)\n+D3574 Uncompressed Size     00000D05 (3333)\n+D3578 Filename Length       009C (156)\n+D357A Extra Length          0000 (0)\n+D357C Comment Length        0000 (0)\n+D357E Disk Start            0000 (0)\n+D3580 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3004 Ext File Attributes   81A40000 (2175008768)\n+D3582 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3008 Local Header Offset   00015C32 (89138)\n-D300C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3586 Local Header Offset   00015C00 (89088)\n+D358A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD300C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD358A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D30A8 CENTRAL HEADER #289   02014B50 (33639248)\n-D30AC Created Zip Spec      14 (20) '2.0'\n-D30AD Created OS            03 (3) 'Unix'\n-D30AE Extract Zip Spec      14 (20) '2.0'\n-D30AF Extract OS            00 (0) 'MS-DOS'\n-D30B0 General Purpose Flag  0800 (2048)\n+D3626 CENTRAL HEADER #289   02014B50 (33639248)\n+D362A Created Zip Spec      14 (20) '2.0'\n+D362B Created OS            03 (3) 'Unix'\n+D362C Extract Zip Spec      14 (20) '2.0'\n+D362D Extract OS            00 (0) 'MS-DOS'\n+D362E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D30B2 Compression Method    0008 (8) 'Deflated'\n-D30B4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D30B8 CRC                   9640338D (2520789901)\n-D30BC Compressed Size       00000785 (1925)\n-D30C0 Uncompressed Size     000013DD (5085)\n-D30C4 Filename Length       0091 (145)\n-D30C6 Extra Length          0000 (0)\n-D30C8 Comment Length        0000 (0)\n-D30CA Disk Start            0000 (0)\n-D30CC Int File Attributes   0000 (0)\n+D3630 Compression Method    0008 (8) 'Deflated'\n+D3632 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3636 CRC                   9640338D (2520789901)\n+D363A Compressed Size       00000785 (1925)\n+D363E Uncompressed Size     000013DD (5085)\n+D3642 Filename Length       0091 (145)\n+D3644 Extra Length          0000 (0)\n+D3646 Comment Length        0000 (0)\n+D3648 Disk Start            0000 (0)\n+D364A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D30CE Ext File Attributes   81A40000 (2175008768)\n+D364C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D30D2 Local Header Offset   000162C6 (90822)\n-D30D6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3650 Local Header Offset   00016294 (90772)\n+D3654 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD30D6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3654: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3167 CENTRAL HEADER #290   02014B50 (33639248)\n-D316B Created Zip Spec      14 (20) '2.0'\n-D316C Created OS            03 (3) 'Unix'\n-D316D Extract Zip Spec      14 (20) '2.0'\n-D316E Extract OS            00 (0) 'MS-DOS'\n-D316F General Purpose Flag  0800 (2048)\n+D36E5 CENTRAL HEADER #290   02014B50 (33639248)\n+D36E9 Created Zip Spec      14 (20) '2.0'\n+D36EA Created OS            03 (3) 'Unix'\n+D36EB Extract Zip Spec      14 (20) '2.0'\n+D36EC Extract OS            00 (0) 'MS-DOS'\n+D36ED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3171 Compression Method    0008 (8) 'Deflated'\n-D3173 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3177 CRC                   5232B519 (1379054873)\n-D317B Compressed Size       000009AF (2479)\n-D317F Uncompressed Size     00001C1F (7199)\n-D3183 Filename Length       0093 (147)\n-D3185 Extra Length          0000 (0)\n-D3187 Comment Length        0000 (0)\n-D3189 Disk Start            0000 (0)\n-D318B Int File Attributes   0000 (0)\n+D36EF Compression Method    0008 (8) 'Deflated'\n+D36F1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D36F5 CRC                   5232B519 (1379054873)\n+D36F9 Compressed Size       000009AF (2479)\n+D36FD Uncompressed Size     00001C1F (7199)\n+D3701 Filename Length       0093 (147)\n+D3703 Extra Length          0000 (0)\n+D3705 Comment Length        0000 (0)\n+D3707 Disk Start            0000 (0)\n+D3709 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D318D Ext File Attributes   81A40000 (2175008768)\n+D370B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3191 Local Header Offset   00016AFA (92922)\n-D3195 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D370F Local Header Offset   00016AC8 (92872)\n+D3713 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3195: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3713: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3228 CENTRAL HEADER #291   02014B50 (33639248)\n-D322C Created Zip Spec      14 (20) '2.0'\n-D322D Created OS            03 (3) 'Unix'\n-D322E Extract Zip Spec      14 (20) '2.0'\n-D322F Extract OS            00 (0) 'MS-DOS'\n-D3230 General Purpose Flag  0800 (2048)\n+D37A6 CENTRAL HEADER #291   02014B50 (33639248)\n+D37AA Created Zip Spec      14 (20) '2.0'\n+D37AB Created OS            03 (3) 'Unix'\n+D37AC Extract Zip Spec      14 (20) '2.0'\n+D37AD Extract OS            00 (0) 'MS-DOS'\n+D37AE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3232 Compression Method    0008 (8) 'Deflated'\n-D3234 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3238 CRC                   57267C45 (1462139973)\n-D323C Compressed Size       0000083D (2109)\n-D3240 Uncompressed Size     000013D6 (5078)\n-D3244 Filename Length       0090 (144)\n-D3246 Extra Length          0000 (0)\n-D3248 Comment Length        0000 (0)\n-D324A Disk Start            0000 (0)\n-D324C Int File Attributes   0000 (0)\n+D37B0 Compression Method    0008 (8) 'Deflated'\n+D37B2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D37B6 CRC                   57267C45 (1462139973)\n+D37BA Compressed Size       0000083D (2109)\n+D37BE Uncompressed Size     000013D6 (5078)\n+D37C2 Filename Length       0090 (144)\n+D37C4 Extra Length          0000 (0)\n+D37C6 Comment Length        0000 (0)\n+D37C8 Disk Start            0000 (0)\n+D37CA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D324E Ext File Attributes   81A40000 (2175008768)\n+D37CC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3252 Local Header Offset   0001755A (95578)\n-D3256 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D37D0 Local Header Offset   00017528 (95528)\n+D37D4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3256: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD37D4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D32E6 CENTRAL HEADER #292   02014B50 (33639248)\n-D32EA Created Zip Spec      14 (20) '2.0'\n-D32EB Created OS            03 (3) 'Unix'\n-D32EC Extract Zip Spec      14 (20) '2.0'\n-D32ED Extract OS            00 (0) 'MS-DOS'\n-D32EE General Purpose Flag  0800 (2048)\n+D3864 CENTRAL HEADER #292   02014B50 (33639248)\n+D3868 Created Zip Spec      14 (20) '2.0'\n+D3869 Created OS            03 (3) 'Unix'\n+D386A Extract Zip Spec      14 (20) '2.0'\n+D386B Extract OS            00 (0) 'MS-DOS'\n+D386C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D32F0 Compression Method    0008 (8) 'Deflated'\n-D32F2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D32F6 CRC                   333FC2BB (859816635)\n-D32FA Compressed Size       00000395 (917)\n-D32FE Uncompressed Size     00000736 (1846)\n-D3302 Filename Length       0097 (151)\n-D3304 Extra Length          0000 (0)\n-D3306 Comment Length        0000 (0)\n-D3308 Disk Start            0000 (0)\n-D330A Int File Attributes   0000 (0)\n+D386E Compression Method    0008 (8) 'Deflated'\n+D3870 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3874 CRC                   333FC2BB (859816635)\n+D3878 Compressed Size       00000395 (917)\n+D387C Uncompressed Size     00000736 (1846)\n+D3880 Filename Length       0097 (151)\n+D3882 Extra Length          0000 (0)\n+D3884 Comment Length        0000 (0)\n+D3886 Disk Start            0000 (0)\n+D3888 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D330C Ext File Attributes   81A40000 (2175008768)\n+D388A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3310 Local Header Offset   00017E45 (97861)\n-D3314 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D388E Local Header Offset   00017E13 (97811)\n+D3892 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3314: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3892: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D33AB CENTRAL HEADER #293   02014B50 (33639248)\n-D33AF Created Zip Spec      14 (20) '2.0'\n-D33B0 Created OS            03 (3) 'Unix'\n-D33B1 Extract Zip Spec      14 (20) '2.0'\n-D33B2 Extract OS            00 (0) 'MS-DOS'\n-D33B3 General Purpose Flag  0800 (2048)\n+D3929 CENTRAL HEADER #293   02014B50 (33639248)\n+D392D Created Zip Spec      14 (20) '2.0'\n+D392E Created OS            03 (3) 'Unix'\n+D392F Extract Zip Spec      14 (20) '2.0'\n+D3930 Extract OS            00 (0) 'MS-DOS'\n+D3931 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D33B5 Compression Method    0008 (8) 'Deflated'\n-D33B7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D33BB CRC                   10CC5E74 (281828980)\n-D33BF Compressed Size       000004BC (1212)\n-D33C3 Uncompressed Size     000009CD (2509)\n-D33C7 Filename Length       0070 (112)\n-D33C9 Extra Length          0000 (0)\n-D33CB Comment Length        0000 (0)\n-D33CD Disk Start            0000 (0)\n-D33CF Int File Attributes   0000 (0)\n+D3933 Compression Method    0008 (8) 'Deflated'\n+D3935 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3939 CRC                   10CC5E74 (281828980)\n+D393D Compressed Size       000004BC (1212)\n+D3941 Uncompressed Size     000009CD (2509)\n+D3945 Filename Length       0070 (112)\n+D3947 Extra Length          0000 (0)\n+D3949 Comment Length        0000 (0)\n+D394B Disk Start            0000 (0)\n+D394D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D33D1 Ext File Attributes   81A40000 (2175008768)\n+D394F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D33D5 Local Header Offset   0001828F (98959)\n-D33D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3953 Local Header Offset   0001825D (98909)\n+D3957 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD33D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3957: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3449 CENTRAL HEADER #294   02014B50 (33639248)\n-D344D Created Zip Spec      14 (20) '2.0'\n-D344E Created OS            03 (3) 'Unix'\n-D344F Extract Zip Spec      14 (20) '2.0'\n-D3450 Extract OS            00 (0) 'MS-DOS'\n-D3451 General Purpose Flag  0800 (2048)\n+D39C7 CENTRAL HEADER #294   02014B50 (33639248)\n+D39CB Created Zip Spec      14 (20) '2.0'\n+D39CC Created OS            03 (3) 'Unix'\n+D39CD Extract Zip Spec      14 (20) '2.0'\n+D39CE Extract OS            00 (0) 'MS-DOS'\n+D39CF General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3453 Compression Method    0008 (8) 'Deflated'\n-D3455 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3459 CRC                   5F6BF872 (1600911474)\n-D345D Compressed Size       000004BC (1212)\n-D3461 Uncompressed Size     000009A0 (2464)\n-D3465 Filename Length       0070 (112)\n-D3467 Extra Length          0000 (0)\n-D3469 Comment Length        0000 (0)\n-D346B Disk Start            0000 (0)\n-D346D Int File Attributes   0000 (0)\n+D39D1 Compression Method    0008 (8) 'Deflated'\n+D39D3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D39D7 CRC                   5F6BF872 (1600911474)\n+D39DB Compressed Size       000004BC (1212)\n+D39DF Uncompressed Size     000009A0 (2464)\n+D39E3 Filename Length       0070 (112)\n+D39E5 Extra Length          0000 (0)\n+D39E7 Comment Length        0000 (0)\n+D39E9 Disk Start            0000 (0)\n+D39EB Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D346F Ext File Attributes   81A40000 (2175008768)\n+D39ED Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3473 Local Header Offset   000187D9 (100313)\n-D3477 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D39F1 Local Header Offset   000187A7 (100263)\n+D39F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3477: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD39F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D34E7 CENTRAL HEADER #295   02014B50 (33639248)\n-D34EB Created Zip Spec      14 (20) '2.0'\n-D34EC Created OS            03 (3) 'Unix'\n-D34ED Extract Zip Spec      14 (20) '2.0'\n-D34EE Extract OS            00 (0) 'MS-DOS'\n-D34EF General Purpose Flag  0800 (2048)\n+D3A65 CENTRAL HEADER #295   02014B50 (33639248)\n+D3A69 Created Zip Spec      14 (20) '2.0'\n+D3A6A Created OS            03 (3) 'Unix'\n+D3A6B Extract Zip Spec      14 (20) '2.0'\n+D3A6C Extract OS            00 (0) 'MS-DOS'\n+D3A6D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D34F1 Compression Method    0008 (8) 'Deflated'\n-D34F3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D34F7 CRC                   456B0BC9 (1164643273)\n-D34FB Compressed Size       000005BD (1469)\n-D34FF Uncompressed Size     00001135 (4405)\n-D3503 Filename Length       006C (108)\n-D3505 Extra Length          0000 (0)\n-D3507 Comment Length        0000 (0)\n-D3509 Disk Start            0000 (0)\n-D350B Int File Attributes   0000 (0)\n+D3A6F Compression Method    0008 (8) 'Deflated'\n+D3A71 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3A75 CRC                   456B0BC9 (1164643273)\n+D3A79 Compressed Size       000005BD (1469)\n+D3A7D Uncompressed Size     00001135 (4405)\n+D3A81 Filename Length       006C (108)\n+D3A83 Extra Length          0000 (0)\n+D3A85 Comment Length        0000 (0)\n+D3A87 Disk Start            0000 (0)\n+D3A89 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D350D Ext File Attributes   81A40000 (2175008768)\n+D3A8B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3511 Local Header Offset   00018D23 (101667)\n-D3515 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3A8F Local Header Offset   00018CF1 (101617)\n+D3A93 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3515: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3A93: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3581 CENTRAL HEADER #296   02014B50 (33639248)\n-D3585 Created Zip Spec      14 (20) '2.0'\n-D3586 Created OS            03 (3) 'Unix'\n-D3587 Extract Zip Spec      14 (20) '2.0'\n-D3588 Extract OS            00 (0) 'MS-DOS'\n-D3589 General Purpose Flag  0800 (2048)\n+D3AFF CENTRAL HEADER #296   02014B50 (33639248)\n+D3B03 Created Zip Spec      14 (20) '2.0'\n+D3B04 Created OS            03 (3) 'Unix'\n+D3B05 Extract Zip Spec      14 (20) '2.0'\n+D3B06 Extract OS            00 (0) 'MS-DOS'\n+D3B07 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D358B Compression Method    0008 (8) 'Deflated'\n-D358D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3591 CRC                   E1F88A2C (3791161900)\n-D3595 Compressed Size       00000457 (1111)\n-D3599 Uncompressed Size     00000924 (2340)\n-D359D Filename Length       0081 (129)\n-D359F Extra Length          0000 (0)\n-D35A1 Comment Length        0000 (0)\n-D35A3 Disk Start            0000 (0)\n-D35A5 Int File Attributes   0000 (0)\n+D3B09 Compression Method    0008 (8) 'Deflated'\n+D3B0B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3B0F CRC                   E1F88A2C (3791161900)\n+D3B13 Compressed Size       00000457 (1111)\n+D3B17 Uncompressed Size     00000924 (2340)\n+D3B1B Filename Length       0081 (129)\n+D3B1D Extra Length          0000 (0)\n+D3B1F Comment Length        0000 (0)\n+D3B21 Disk Start            0000 (0)\n+D3B23 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D35A7 Ext File Attributes   81A40000 (2175008768)\n+D3B25 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D35AB Local Header Offset   0001936A (103274)\n-D35AF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3B29 Local Header Offset   00019338 (103224)\n+D3B2D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD35AF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3B2D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3630 CENTRAL HEADER #297   02014B50 (33639248)\n-D3634 Created Zip Spec      14 (20) '2.0'\n-D3635 Created OS            03 (3) 'Unix'\n-D3636 Extract Zip Spec      14 (20) '2.0'\n-D3637 Extract OS            00 (0) 'MS-DOS'\n-D3638 General Purpose Flag  0800 (2048)\n+D3BAE CENTRAL HEADER #297   02014B50 (33639248)\n+D3BB2 Created Zip Spec      14 (20) '2.0'\n+D3BB3 Created OS            03 (3) 'Unix'\n+D3BB4 Extract Zip Spec      14 (20) '2.0'\n+D3BB5 Extract OS            00 (0) 'MS-DOS'\n+D3BB6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D363A Compression Method    0008 (8) 'Deflated'\n-D363C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3640 CRC                   6A45582D (1782929453)\n-D3644 Compressed Size       000004E4 (1252)\n-D3648 Uncompressed Size     000009E0 (2528)\n-D364C Filename Length       0075 (117)\n-D364E Extra Length          0000 (0)\n-D3650 Comment Length        0000 (0)\n-D3652 Disk Start            0000 (0)\n-D3654 Int File Attributes   0000 (0)\n+D3BB8 Compression Method    0008 (8) 'Deflated'\n+D3BBA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3BBE CRC                   6A45582D (1782929453)\n+D3BC2 Compressed Size       000004E4 (1252)\n+D3BC6 Uncompressed Size     000009E0 (2528)\n+D3BCA Filename Length       0075 (117)\n+D3BCC Extra Length          0000 (0)\n+D3BCE Comment Length        0000 (0)\n+D3BD0 Disk Start            0000 (0)\n+D3BD2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3656 Ext File Attributes   81A40000 (2175008768)\n+D3BD4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D365A Local Header Offset   00019860 (104544)\n-D365E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3BD8 Local Header Offset   0001982E (104494)\n+D3BDC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD365E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3BDC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D36D3 CENTRAL HEADER #298   02014B50 (33639248)\n-D36D7 Created Zip Spec      14 (20) '2.0'\n-D36D8 Created OS            03 (3) 'Unix'\n-D36D9 Extract Zip Spec      14 (20) '2.0'\n-D36DA Extract OS            00 (0) 'MS-DOS'\n-D36DB General Purpose Flag  0800 (2048)\n+D3C51 CENTRAL HEADER #298   02014B50 (33639248)\n+D3C55 Created Zip Spec      14 (20) '2.0'\n+D3C56 Created OS            03 (3) 'Unix'\n+D3C57 Extract Zip Spec      14 (20) '2.0'\n+D3C58 Extract OS            00 (0) 'MS-DOS'\n+D3C59 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D36DD Compression Method    0008 (8) 'Deflated'\n-D36DF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D36E3 CRC                   4731534C (1194414924)\n-D36E7 Compressed Size       0000051E (1310)\n-D36EB Uncompressed Size     00000B90 (2960)\n-D36EF Filename Length       0077 (119)\n-D36F1 Extra Length          0000 (0)\n-D36F3 Comment Length        0000 (0)\n-D36F5 Disk Start            0000 (0)\n-D36F7 Int File Attributes   0000 (0)\n+D3C5B Compression Method    0008 (8) 'Deflated'\n+D3C5D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3C61 CRC                   4731534C (1194414924)\n+D3C65 Compressed Size       0000051E (1310)\n+D3C69 Uncompressed Size     00000B90 (2960)\n+D3C6D Filename Length       0077 (119)\n+D3C6F Extra Length          0000 (0)\n+D3C71 Comment Length        0000 (0)\n+D3C73 Disk Start            0000 (0)\n+D3C75 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D36F9 Ext File Attributes   81A40000 (2175008768)\n+D3C77 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D36FD Local Header Offset   00019DD7 (105943)\n-D3701 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3C7B Local Header Offset   00019DA5 (105893)\n+D3C7F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3701: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3C7F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3778 CENTRAL HEADER #299   02014B50 (33639248)\n-D377C Created Zip Spec      14 (20) '2.0'\n-D377D Created OS            03 (3) 'Unix'\n-D377E Extract Zip Spec      14 (20) '2.0'\n-D377F Extract OS            00 (0) 'MS-DOS'\n-D3780 General Purpose Flag  0800 (2048)\n+D3CF6 CENTRAL HEADER #299   02014B50 (33639248)\n+D3CFA Created Zip Spec      14 (20) '2.0'\n+D3CFB Created OS            03 (3) 'Unix'\n+D3CFC Extract Zip Spec      14 (20) '2.0'\n+D3CFD Extract OS            00 (0) 'MS-DOS'\n+D3CFE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3782 Compression Method    0008 (8) 'Deflated'\n-D3784 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3788 CRC                   CEBA8B64 (3468331876)\n-D378C Compressed Size       000004A0 (1184)\n-D3790 Uncompressed Size     00000A7D (2685)\n-D3794 Filename Length       0076 (118)\n-D3796 Extra Length          0000 (0)\n-D3798 Comment Length        0000 (0)\n-D379A Disk Start            0000 (0)\n-D379C Int File Attributes   0000 (0)\n+D3D00 Compression Method    0008 (8) 'Deflated'\n+D3D02 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3D06 CRC                   CEBA8B64 (3468331876)\n+D3D0A Compressed Size       000004A0 (1184)\n+D3D0E Uncompressed Size     00000A7D (2685)\n+D3D12 Filename Length       0076 (118)\n+D3D14 Extra Length          0000 (0)\n+D3D16 Comment Length        0000 (0)\n+D3D18 Disk Start            0000 (0)\n+D3D1A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D379E Ext File Attributes   81A40000 (2175008768)\n+D3D1C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D37A2 Local Header Offset   0001A38A (107402)\n-D37A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3D20 Local Header Offset   0001A358 (107352)\n+D3D24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD37A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3D24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D381C CENTRAL HEADER #300   02014B50 (33639248)\n-D3820 Created Zip Spec      14 (20) '2.0'\n-D3821 Created OS            03 (3) 'Unix'\n-D3822 Extract Zip Spec      14 (20) '2.0'\n-D3823 Extract OS            00 (0) 'MS-DOS'\n-D3824 General Purpose Flag  0800 (2048)\n+D3D9A CENTRAL HEADER #300   02014B50 (33639248)\n+D3D9E Created Zip Spec      14 (20) '2.0'\n+D3D9F Created OS            03 (3) 'Unix'\n+D3DA0 Extract Zip Spec      14 (20) '2.0'\n+D3DA1 Extract OS            00 (0) 'MS-DOS'\n+D3DA2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3826 Compression Method    0008 (8) 'Deflated'\n-D3828 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D382C CRC                   0DACEA84 (229436036)\n-D3830 Compressed Size       000004B1 (1201)\n-D3834 Uncompressed Size     00000A95 (2709)\n-D3838 Filename Length       0075 (117)\n-D383A Extra Length          0000 (0)\n-D383C Comment Length        0000 (0)\n-D383E Disk Start            0000 (0)\n-D3840 Int File Attributes   0000 (0)\n+D3DA4 Compression Method    0008 (8) 'Deflated'\n+D3DA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3DAA CRC                   0DACEA84 (229436036)\n+D3DAE Compressed Size       000004B1 (1201)\n+D3DB2 Uncompressed Size     00000A95 (2709)\n+D3DB6 Filename Length       0075 (117)\n+D3DB8 Extra Length          0000 (0)\n+D3DBA Comment Length        0000 (0)\n+D3DBC Disk Start            0000 (0)\n+D3DBE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3842 Ext File Attributes   81A40000 (2175008768)\n+D3DC0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3846 Local Header Offset   0001A8BE (108734)\n-D384A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3DC4 Local Header Offset   0001A88C (108684)\n+D3DC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD384A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3DC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D38BF CENTRAL HEADER #301   02014B50 (33639248)\n-D38C3 Created Zip Spec      14 (20) '2.0'\n-D38C4 Created OS            03 (3) 'Unix'\n-D38C5 Extract Zip Spec      14 (20) '2.0'\n-D38C6 Extract OS            00 (0) 'MS-DOS'\n-D38C7 General Purpose Flag  0800 (2048)\n+D3E3D CENTRAL HEADER #301   02014B50 (33639248)\n+D3E41 Created Zip Spec      14 (20) '2.0'\n+D3E42 Created OS            03 (3) 'Unix'\n+D3E43 Extract Zip Spec      14 (20) '2.0'\n+D3E44 Extract OS            00 (0) 'MS-DOS'\n+D3E45 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D38C9 Compression Method    0008 (8) 'Deflated'\n-D38CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D38CF CRC                   2E84B239 (780448313)\n-D38D3 Compressed Size       000006DB (1755)\n-D38D7 Uncompressed Size     0000121D (4637)\n-D38DB Filename Length       0076 (118)\n-D38DD Extra Length          0000 (0)\n-D38DF Comment Length        0000 (0)\n-D38E1 Disk Start            0000 (0)\n-D38E3 Int File Attributes   0000 (0)\n+D3E47 Compression Method    0008 (8) 'Deflated'\n+D3E49 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3E4D CRC                   2E84B239 (780448313)\n+D3E51 Compressed Size       000006DB (1755)\n+D3E55 Uncompressed Size     0000121D (4637)\n+D3E59 Filename Length       0076 (118)\n+D3E5B Extra Length          0000 (0)\n+D3E5D Comment Length        0000 (0)\n+D3E5F Disk Start            0000 (0)\n+D3E61 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D38E5 Ext File Attributes   81A40000 (2175008768)\n+D3E63 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D38E9 Local Header Offset   0001AE02 (110082)\n-D38ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D3E67 Local Header Offset   0001ADD0 (110032)\n+D3E6B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD38ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3E6B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3963 CENTRAL HEADER #302   02014B50 (33639248)\n-D3967 Created Zip Spec      14 (20) '2.0'\n-D3968 Created OS            03 (3) 'Unix'\n-D3969 Extract Zip Spec      14 (20) '2.0'\n-D396A Extract OS            00 (0) 'MS-DOS'\n-D396B General Purpose Flag  0800 (2048)\n+D3EE1 CENTRAL HEADER #302   02014B50 (33639248)\n+D3EE5 Created Zip Spec      14 (20) '2.0'\n+D3EE6 Created OS            03 (3) 'Unix'\n+D3EE7 Extract Zip Spec      14 (20) '2.0'\n+D3EE8 Extract OS            00 (0) 'MS-DOS'\n+D3EE9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D396D Compression Method    0008 (8) 'Deflated'\n-D396F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3973 CRC                   10E7267F (283584127)\n-D3977 Compressed Size       000003B1 (945)\n-D397B Uncompressed Size     000006FB (1787)\n-D397F Filename Length       0090 (144)\n-D3981 Extra Length          0000 (0)\n-D3983 Comment Length        0000 (0)\n-D3985 Disk Start            0000 (0)\n-D3987 Int File Attributes   0000 (0)\n+D3EEB Compression Method    0008 (8) 'Deflated'\n+D3EED Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3EF1 CRC                   10E7267F (283584127)\n+D3EF5 Compressed Size       000003B1 (945)\n+D3EF9 Uncompressed Size     000006FB (1787)\n+D3EFD Filename Length       0090 (144)\n+D3EFF Extra Length          0000 (0)\n+D3F01 Comment Length        0000 (0)\n+D3F03 Disk Start            0000 (0)\n+D3F05 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3989 Ext File Attributes   81A40000 (2175008768)\n+D3F07 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D398D Local Header Offset   0001B571 (111985)\n-D3991 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3F0B Local Header Offset   0001B53F (111935)\n+D3F0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3991: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3F0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3A21 CENTRAL HEADER #303   02014B50 (33639248)\n-D3A25 Created Zip Spec      14 (20) '2.0'\n-D3A26 Created OS            03 (3) 'Unix'\n-D3A27 Extract Zip Spec      14 (20) '2.0'\n-D3A28 Extract OS            00 (0) 'MS-DOS'\n-D3A29 General Purpose Flag  0800 (2048)\n+D3F9F CENTRAL HEADER #303   02014B50 (33639248)\n+D3FA3 Created Zip Spec      14 (20) '2.0'\n+D3FA4 Created OS            03 (3) 'Unix'\n+D3FA5 Extract Zip Spec      14 (20) '2.0'\n+D3FA6 Extract OS            00 (0) 'MS-DOS'\n+D3FA7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3A2B Compression Method    0008 (8) 'Deflated'\n-D3A2D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3A31 CRC                   24E47A3B (618953275)\n-D3A35 Compressed Size       000003B4 (948)\n-D3A39 Uncompressed Size     000006FF (1791)\n-D3A3D Filename Length       0091 (145)\n-D3A3F Extra Length          0000 (0)\n-D3A41 Comment Length        0000 (0)\n-D3A43 Disk Start            0000 (0)\n-D3A45 Int File Attributes   0000 (0)\n+D3FA9 Compression Method    0008 (8) 'Deflated'\n+D3FAB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D3FAF CRC                   24E47A3B (618953275)\n+D3FB3 Compressed Size       000003B4 (948)\n+D3FB7 Uncompressed Size     000006FF (1791)\n+D3FBB Filename Length       0091 (145)\n+D3FBD Extra Length          0000 (0)\n+D3FBF Comment Length        0000 (0)\n+D3FC1 Disk Start            0000 (0)\n+D3FC3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3A47 Ext File Attributes   81A40000 (2175008768)\n+D3FC5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3A4B Local Header Offset   0001B9D0 (113104)\n-D3A4F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D3FC9 Local Header Offset   0001B99E (113054)\n+D3FCD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3A4F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD3FCD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3AE0 CENTRAL HEADER #304   02014B50 (33639248)\n-D3AE4 Created Zip Spec      14 (20) '2.0'\n-D3AE5 Created OS            03 (3) 'Unix'\n-D3AE6 Extract Zip Spec      14 (20) '2.0'\n-D3AE7 Extract OS            00 (0) 'MS-DOS'\n-D3AE8 General Purpose Flag  0800 (2048)\n+D405E CENTRAL HEADER #304   02014B50 (33639248)\n+D4062 Created Zip Spec      14 (20) '2.0'\n+D4063 Created OS            03 (3) 'Unix'\n+D4064 Extract Zip Spec      14 (20) '2.0'\n+D4065 Extract OS            00 (0) 'MS-DOS'\n+D4066 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3AEA Compression Method    0008 (8) 'Deflated'\n-D3AEC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3AF0 CRC                   042BB565 (69973349)\n-D3AF4 Compressed Size       000007C6 (1990)\n-D3AF8 Uncompressed Size     00001364 (4964)\n-D3AFC Filename Length       008C (140)\n-D3AFE Extra Length          0000 (0)\n-D3B00 Comment Length        0000 (0)\n-D3B02 Disk Start            0000 (0)\n-D3B04 Int File Attributes   0000 (0)\n+D4068 Compression Method    0008 (8) 'Deflated'\n+D406A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D406E CRC                   042BB565 (69973349)\n+D4072 Compressed Size       000007C6 (1990)\n+D4076 Uncompressed Size     00001364 (4964)\n+D407A Filename Length       008C (140)\n+D407C Extra Length          0000 (0)\n+D407E Comment Length        0000 (0)\n+D4080 Disk Start            0000 (0)\n+D4082 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3B06 Ext File Attributes   81A40000 (2175008768)\n+D4084 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3B0A Local Header Offset   0001BE33 (114227)\n-D3B0E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D4088 Local Header Offset   0001BE01 (114177)\n+D408C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXX'\n #\n-# WARNING: Offset 0xD3B0E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD408C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3B9A CENTRAL HEADER #305   02014B50 (33639248)\n-D3B9E Created Zip Spec      14 (20) '2.0'\n-D3B9F Created OS            03 (3) 'Unix'\n-D3BA0 Extract Zip Spec      14 (20) '2.0'\n-D3BA1 Extract OS            00 (0) 'MS-DOS'\n-D3BA2 General Purpose Flag  0800 (2048)\n+D4118 CENTRAL HEADER #305   02014B50 (33639248)\n+D411C Created Zip Spec      14 (20) '2.0'\n+D411D Created OS            03 (3) 'Unix'\n+D411E Extract Zip Spec      14 (20) '2.0'\n+D411F Extract OS            00 (0) 'MS-DOS'\n+D4120 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3BA4 Compression Method    0008 (8) 'Deflated'\n-D3BA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3BAA CRC                   7A63232B (2053317419)\n-D3BAE Compressed Size       0000084C (2124)\n-D3BB2 Uncompressed Size     000013C0 (5056)\n-D3BB6 Filename Length       008D (141)\n-D3BB8 Extra Length          0000 (0)\n-D3BBA Comment Length        0000 (0)\n-D3BBC Disk Start            0000 (0)\n-D3BBE Int File Attributes   0000 (0)\n+D4122 Compression Method    0008 (8) 'Deflated'\n+D4124 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4128 CRC                   7A63232B (2053317419)\n+D412C Compressed Size       0000084C (2124)\n+D4130 Uncompressed Size     000013C0 (5056)\n+D4134 Filename Length       008D (141)\n+D4136 Extra Length          0000 (0)\n+D4138 Comment Length        0000 (0)\n+D413A Disk Start            0000 (0)\n+D413C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3BC0 Ext File Attributes   81A40000 (2175008768)\n+D413E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3BC4 Local Header Offset   0001C6A3 (116387)\n-D3BC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D4142 Local Header Offset   0001C671 (116337)\n+D4146 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXX'\n #\n-# WARNING: Offset 0xD3BC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4146: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3C55 CENTRAL HEADER #306   02014B50 (33639248)\n-D3C59 Created Zip Spec      14 (20) '2.0'\n-D3C5A Created OS            03 (3) 'Unix'\n-D3C5B Extract Zip Spec      14 (20) '2.0'\n-D3C5C Extract OS            00 (0) 'MS-DOS'\n-D3C5D General Purpose Flag  0800 (2048)\n+D41D3 CENTRAL HEADER #306   02014B50 (33639248)\n+D41D7 Created Zip Spec      14 (20) '2.0'\n+D41D8 Created OS            03 (3) 'Unix'\n+D41D9 Extract Zip Spec      14 (20) '2.0'\n+D41DA Extract OS            00 (0) 'MS-DOS'\n+D41DB General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3C5F Compression Method    0008 (8) 'Deflated'\n-D3C61 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3C65 CRC                   19888393 (428376979)\n-D3C69 Compressed Size       000004B8 (1208)\n-D3C6D Uncompressed Size     0000092E (2350)\n-D3C71 Filename Length       0076 (118)\n-D3C73 Extra Length          0000 (0)\n-D3C75 Comment Length        0000 (0)\n-D3C77 Disk Start            0000 (0)\n-D3C79 Int File Attributes   0000 (0)\n+D41DD Compression Method    0008 (8) 'Deflated'\n+D41DF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D41E3 CRC                   19888393 (428376979)\n+D41E7 Compressed Size       000004B8 (1208)\n+D41EB Uncompressed Size     0000092E (2350)\n+D41EF Filename Length       0076 (118)\n+D41F1 Extra Length          0000 (0)\n+D41F3 Comment Length        0000 (0)\n+D41F5 Disk Start            0000 (0)\n+D41F7 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3C7B Ext File Attributes   81A40000 (2175008768)\n+D41F9 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3C7F Local Header Offset   0001CF9A (118682)\n-D3C83 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D41FD Local Header Offset   0001CF68 (118632)\n+D4201 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3C83: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4201: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3CF9 CENTRAL HEADER #307   02014B50 (33639248)\n-D3CFD Created Zip Spec      14 (20) '2.0'\n-D3CFE Created OS            03 (3) 'Unix'\n-D3CFF Extract Zip Spec      14 (20) '2.0'\n-D3D00 Extract OS            00 (0) 'MS-DOS'\n-D3D01 General Purpose Flag  0800 (2048)\n+D4277 CENTRAL HEADER #307   02014B50 (33639248)\n+D427B Created Zip Spec      14 (20) '2.0'\n+D427C Created OS            03 (3) 'Unix'\n+D427D Extract Zip Spec      14 (20) '2.0'\n+D427E Extract OS            00 (0) 'MS-DOS'\n+D427F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3D03 Compression Method    0008 (8) 'Deflated'\n-D3D05 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3D09 CRC                   8B1E3BB7 (2334014391)\n-D3D0D Compressed Size       00000B79 (2937)\n-D3D11 Uncompressed Size     00002091 (8337)\n-D3D15 Filename Length       007C (124)\n-D3D17 Extra Length          0000 (0)\n-D3D19 Comment Length        0000 (0)\n-D3D1B Disk Start            0000 (0)\n-D3D1D Int File Attributes   0000 (0)\n+D4281 Compression Method    0008 (8) 'Deflated'\n+D4283 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4287 CRC                   8B1E3BB7 (2334014391)\n+D428B Compressed Size       00000B79 (2937)\n+D428F Uncompressed Size     00002091 (8337)\n+D4293 Filename Length       007C (124)\n+D4295 Extra Length          0000 (0)\n+D4297 Comment Length        0000 (0)\n+D4299 Disk Start            0000 (0)\n+D429B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3D1F Ext File Attributes   81A40000 (2175008768)\n+D429D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3D23 Local Header Offset   0001D4E6 (120038)\n-D3D27 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D42A1 Local Header Offset   0001D4B4 (119988)\n+D42A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3D27: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD42A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3DA3 CENTRAL HEADER #308   02014B50 (33639248)\n-D3DA7 Created Zip Spec      14 (20) '2.0'\n-D3DA8 Created OS            03 (3) 'Unix'\n-D3DA9 Extract Zip Spec      14 (20) '2.0'\n-D3DAA Extract OS            00 (0) 'MS-DOS'\n-D3DAB General Purpose Flag  0800 (2048)\n+D4321 CENTRAL HEADER #308   02014B50 (33639248)\n+D4325 Created Zip Spec      14 (20) '2.0'\n+D4326 Created OS            03 (3) 'Unix'\n+D4327 Extract Zip Spec      14 (20) '2.0'\n+D4328 Extract OS            00 (0) 'MS-DOS'\n+D4329 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3DAD Compression Method    0008 (8) 'Deflated'\n-D3DAF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3DB3 CRC                   0D142FFC (219426812)\n-D3DB7 Compressed Size       000009EA (2538)\n-D3DBB Uncompressed Size     00001A7B (6779)\n-D3DBF Filename Length       0091 (145)\n-D3DC1 Extra Length          0000 (0)\n-D3DC3 Comment Length        0000 (0)\n-D3DC5 Disk Start            0000 (0)\n-D3DC7 Int File Attributes   0000 (0)\n+D432B Compression Method    0008 (8) 'Deflated'\n+D432D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4331 CRC                   0D142FFC (219426812)\n+D4335 Compressed Size       000009EA (2538)\n+D4339 Uncompressed Size     00001A7B (6779)\n+D433D Filename Length       0091 (145)\n+D433F Extra Length          0000 (0)\n+D4341 Comment Length        0000 (0)\n+D4343 Disk Start            0000 (0)\n+D4345 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3DC9 Ext File Attributes   81A40000 (2175008768)\n+D4347 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3DCD Local Header Offset   0001E0F9 (123129)\n-D3DD1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D434B Local Header Offset   0001E0C7 (123079)\n+D434F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3DD1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD434F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3E62 CENTRAL HEADER #309   02014B50 (33639248)\n-D3E66 Created Zip Spec      14 (20) '2.0'\n-D3E67 Created OS            03 (3) 'Unix'\n-D3E68 Extract Zip Spec      14 (20) '2.0'\n-D3E69 Extract OS            00 (0) 'MS-DOS'\n-D3E6A General Purpose Flag  0800 (2048)\n+D43E0 CENTRAL HEADER #309   02014B50 (33639248)\n+D43E4 Created Zip Spec      14 (20) '2.0'\n+D43E5 Created OS            03 (3) 'Unix'\n+D43E6 Extract Zip Spec      14 (20) '2.0'\n+D43E7 Extract OS            00 (0) 'MS-DOS'\n+D43E8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3E6C Compression Method    0008 (8) 'Deflated'\n-D3E6E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3E72 CRC                   726CFBF2 (1919745010)\n-D3E76 Compressed Size       00000434 (1076)\n-D3E7A Uncompressed Size     00000886 (2182)\n-D3E7E Filename Length       0097 (151)\n-D3E80 Extra Length          0000 (0)\n-D3E82 Comment Length        0000 (0)\n-D3E84 Disk Start            0000 (0)\n-D3E86 Int File Attributes   0000 (0)\n+D43EA Compression Method    0008 (8) 'Deflated'\n+D43EC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D43F0 CRC                   726CFBF2 (1919745010)\n+D43F4 Compressed Size       00000434 (1076)\n+D43F8 Uncompressed Size     00000886 (2182)\n+D43FC Filename Length       0097 (151)\n+D43FE Extra Length          0000 (0)\n+D4400 Comment Length        0000 (0)\n+D4402 Disk Start            0000 (0)\n+D4404 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3E88 Ext File Attributes   81A40000 (2175008768)\n+D4406 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3E8C Local Header Offset   0001EB92 (125842)\n-D3E90 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D440A Local Header Offset   0001EB60 (125792)\n+D440E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3E90: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD440E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3F27 CENTRAL HEADER #310   02014B50 (33639248)\n-D3F2B Created Zip Spec      14 (20) '2.0'\n-D3F2C Created OS            03 (3) 'Unix'\n-D3F2D Extract Zip Spec      14 (20) '2.0'\n-D3F2E Extract OS            00 (0) 'MS-DOS'\n-D3F2F General Purpose Flag  0800 (2048)\n+D44A5 CENTRAL HEADER #310   02014B50 (33639248)\n+D44A9 Created Zip Spec      14 (20) '2.0'\n+D44AA Created OS            03 (3) 'Unix'\n+D44AB Extract Zip Spec      14 (20) '2.0'\n+D44AC Extract OS            00 (0) 'MS-DOS'\n+D44AD General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3F31 Compression Method    0008 (8) 'Deflated'\n-D3F33 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D3F37 CRC                   0124A640 (19179072)\n-D3F3B Compressed Size       0000070A (1802)\n-D3F3F Uncompressed Size     00001071 (4209)\n-D3F43 Filename Length       009E (158)\n-D3F45 Extra Length          0000 (0)\n-D3F47 Comment Length        0000 (0)\n-D3F49 Disk Start            0000 (0)\n-D3F4B Int File Attributes   0000 (0)\n+D44AF Compression Method    0008 (8) 'Deflated'\n+D44B1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D44B5 CRC                   0124A640 (19179072)\n+D44B9 Compressed Size       0000070A (1802)\n+D44BD Uncompressed Size     00001071 (4209)\n+D44C1 Filename Length       009E (158)\n+D44C3 Extra Length          0000 (0)\n+D44C5 Comment Length        0000 (0)\n+D44C7 Disk Start            0000 (0)\n+D44C9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D3F4D Ext File Attributes   81A40000 (2175008768)\n+D44CB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D3F51 Local Header Offset   0001F07B (127099)\n-D3F55 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D44CF Local Header Offset   0001F049 (127049)\n+D44D3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD3F55: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD44D3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D3FF3 CENTRAL HEADER #311   02014B50 (33639248)\n-D3FF7 Created Zip Spec      14 (20) '2.0'\n-D3FF8 Created OS            03 (3) 'Unix'\n-D3FF9 Extract Zip Spec      14 (20) '2.0'\n-D3FFA Extract OS            00 (0) 'MS-DOS'\n-D3FFB General Purpose Flag  0800 (2048)\n+D4571 CENTRAL HEADER #311   02014B50 (33639248)\n+D4575 Created Zip Spec      14 (20) '2.0'\n+D4576 Created OS            03 (3) 'Unix'\n+D4577 Extract Zip Spec      14 (20) '2.0'\n+D4578 Extract OS            00 (0) 'MS-DOS'\n+D4579 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D3FFD Compression Method    0008 (8) 'Deflated'\n-D3FFF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4003 CRC                   7E793C9C (2121874588)\n-D4007 Compressed Size       00000459 (1113)\n-D400B Uncompressed Size     000008CC (2252)\n-D400F Filename Length       009E (158)\n-D4011 Extra Length          0000 (0)\n-D4013 Comment Length        0000 (0)\n-D4015 Disk Start            0000 (0)\n-D4017 Int File Attributes   0000 (0)\n+D457B Compression Method    0008 (8) 'Deflated'\n+D457D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4581 CRC                   7E793C9C (2121874588)\n+D4585 Compressed Size       00000459 (1113)\n+D4589 Uncompressed Size     000008CC (2252)\n+D458D Filename Length       009E (158)\n+D458F Extra Length          0000 (0)\n+D4591 Comment Length        0000 (0)\n+D4593 Disk Start            0000 (0)\n+D4595 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4019 Ext File Attributes   81A40000 (2175008768)\n+D4597 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D401D Local Header Offset   0001F841 (129089)\n-D4021 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D459B Local Header Offset   0001F80F (129039)\n+D459F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4021: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD459F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D40BF CENTRAL HEADER #312   02014B50 (33639248)\n-D40C3 Created Zip Spec      14 (20) '2.0'\n-D40C4 Created OS            03 (3) 'Unix'\n-D40C5 Extract Zip Spec      14 (20) '2.0'\n-D40C6 Extract OS            00 (0) 'MS-DOS'\n-D40C7 General Purpose Flag  0800 (2048)\n+D463D CENTRAL HEADER #312   02014B50 (33639248)\n+D4641 Created Zip Spec      14 (20) '2.0'\n+D4642 Created OS            03 (3) 'Unix'\n+D4643 Extract Zip Spec      14 (20) '2.0'\n+D4644 Extract OS            00 (0) 'MS-DOS'\n+D4645 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D40C9 Compression Method    0008 (8) 'Deflated'\n-D40CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D40CF CRC                   4C048087 (1275363463)\n-D40D3 Compressed Size       00000445 (1093)\n-D40D7 Uncompressed Size     00000861 (2145)\n-D40DB Filename Length       0073 (115)\n-D40DD Extra Length          0000 (0)\n-D40DF Comment Length        0000 (0)\n-D40E1 Disk Start            0000 (0)\n-D40E3 Int File Attributes   0000 (0)\n+D4647 Compression Method    0008 (8) 'Deflated'\n+D4649 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D464D CRC                   4C048087 (1275363463)\n+D4651 Compressed Size       00000445 (1093)\n+D4655 Uncompressed Size     00000861 (2145)\n+D4659 Filename Length       0073 (115)\n+D465B Extra Length          0000 (0)\n+D465D Comment Length        0000 (0)\n+D465F Disk Start            0000 (0)\n+D4661 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D40E5 Ext File Attributes   81A40000 (2175008768)\n+D4663 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D40E9 Local Header Offset   0001FD56 (130390)\n-D40ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4667 Local Header Offset   0001FD24 (130340)\n+D466B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD40ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD466B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4160 CENTRAL HEADER #313   02014B50 (33639248)\n-D4164 Created Zip Spec      14 (20) '2.0'\n-D4165 Created OS            03 (3) 'Unix'\n-D4166 Extract Zip Spec      14 (20) '2.0'\n-D4167 Extract OS            00 (0) 'MS-DOS'\n-D4168 General Purpose Flag  0800 (2048)\n+D46DE CENTRAL HEADER #313   02014B50 (33639248)\n+D46E2 Created Zip Spec      14 (20) '2.0'\n+D46E3 Created OS            03 (3) 'Unix'\n+D46E4 Extract Zip Spec      14 (20) '2.0'\n+D46E5 Extract OS            00 (0) 'MS-DOS'\n+D46E6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D416A Compression Method    0008 (8) 'Deflated'\n-D416C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4170 CRC                   877B2EE8 (2272997096)\n-D4174 Compressed Size       00000AAF (2735)\n-D4178 Uncompressed Size     0000215E (8542)\n-D417C Filename Length       0080 (128)\n-D417E Extra Length          0000 (0)\n-D4180 Comment Length        0000 (0)\n-D4182 Disk Start            0000 (0)\n-D4184 Int File Attributes   0000 (0)\n+D46E8 Compression Method    0008 (8) 'Deflated'\n+D46EA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D46EE CRC                   877B2EE8 (2272997096)\n+D46F2 Compressed Size       00000AAF (2735)\n+D46F6 Uncompressed Size     0000215E (8542)\n+D46FA Filename Length       0080 (128)\n+D46FC Extra Length          0000 (0)\n+D46FE Comment Length        0000 (0)\n+D4700 Disk Start            0000 (0)\n+D4702 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4186 Ext File Attributes   81A40000 (2175008768)\n+D4704 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D418A Local Header Offset   0002022C (131628)\n-D418E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4708 Local Header Offset   000201FA (131578)\n+D470C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD418E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD470C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D420E CENTRAL HEADER #314   02014B50 (33639248)\n-D4212 Created Zip Spec      14 (20) '2.0'\n-D4213 Created OS            03 (3) 'Unix'\n-D4214 Extract Zip Spec      14 (20) '2.0'\n-D4215 Extract OS            00 (0) 'MS-DOS'\n-D4216 General Purpose Flag  0800 (2048)\n+D478C CENTRAL HEADER #314   02014B50 (33639248)\n+D4790 Created Zip Spec      14 (20) '2.0'\n+D4791 Created OS            03 (3) 'Unix'\n+D4792 Extract Zip Spec      14 (20) '2.0'\n+D4793 Extract OS            00 (0) 'MS-DOS'\n+D4794 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4218 Compression Method    0008 (8) 'Deflated'\n-D421A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D421E CRC                   E43D22D5 (3829211861)\n-D4222 Compressed Size       00000806 (2054)\n-D4226 Uncompressed Size     0000147F (5247)\n-D422A Filename Length       0084 (132)\n-D422C Extra Length          0000 (0)\n-D422E Comment Length        0000 (0)\n-D4230 Disk Start            0000 (0)\n-D4232 Int File Attributes   0000 (0)\n+D4796 Compression Method    0008 (8) 'Deflated'\n+D4798 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D479C CRC                   E43D22D5 (3829211861)\n+D47A0 Compressed Size       00000806 (2054)\n+D47A4 Uncompressed Size     0000147F (5247)\n+D47A8 Filename Length       0084 (132)\n+D47AA Extra Length          0000 (0)\n+D47AC Comment Length        0000 (0)\n+D47AE Disk Start            0000 (0)\n+D47B0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4234 Ext File Attributes   81A40000 (2175008768)\n+D47B2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4238 Local Header Offset   00020D79 (134521)\n-D423C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D47B6 Local Header Offset   00020D47 (134471)\n+D47BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD423C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD47BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D42C0 CENTRAL HEADER #315   02014B50 (33639248)\n-D42C4 Created Zip Spec      14 (20) '2.0'\n-D42C5 Created OS            03 (3) 'Unix'\n-D42C6 Extract Zip Spec      14 (20) '2.0'\n-D42C7 Extract OS            00 (0) 'MS-DOS'\n-D42C8 General Purpose Flag  0800 (2048)\n+D483E CENTRAL HEADER #315   02014B50 (33639248)\n+D4842 Created Zip Spec      14 (20) '2.0'\n+D4843 Created OS            03 (3) 'Unix'\n+D4844 Extract Zip Spec      14 (20) '2.0'\n+D4845 Extract OS            00 (0) 'MS-DOS'\n+D4846 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D42CA Compression Method    0008 (8) 'Deflated'\n-D42CC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D42D0 CRC                   D765846F (3613754479)\n-D42D4 Compressed Size       0000069E (1694)\n-D42D8 Uncompressed Size     00001060 (4192)\n-D42DC Filename Length       0076 (118)\n-D42DE Extra Length          0000 (0)\n-D42E0 Comment Length        0000 (0)\n-D42E2 Disk Start            0000 (0)\n-D42E4 Int File Attributes   0000 (0)\n+D4848 Compression Method    0008 (8) 'Deflated'\n+D484A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D484E CRC                   D765846F (3613754479)\n+D4852 Compressed Size       0000069E (1694)\n+D4856 Uncompressed Size     00001060 (4192)\n+D485A Filename Length       0076 (118)\n+D485C Extra Length          0000 (0)\n+D485E Comment Length        0000 (0)\n+D4860 Disk Start            0000 (0)\n+D4862 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D42E6 Ext File Attributes   81A40000 (2175008768)\n+D4864 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D42EA Local Header Offset   00021621 (136737)\n-D42EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4868 Local Header Offset   000215EF (136687)\n+D486C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD42EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD486C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4364 CENTRAL HEADER #316   02014B50 (33639248)\n-D4368 Created Zip Spec      14 (20) '2.0'\n-D4369 Created OS            03 (3) 'Unix'\n-D436A Extract Zip Spec      14 (20) '2.0'\n-D436B Extract OS            00 (0) 'MS-DOS'\n-D436C General Purpose Flag  0800 (2048)\n+D48E2 CENTRAL HEADER #316   02014B50 (33639248)\n+D48E6 Created Zip Spec      14 (20) '2.0'\n+D48E7 Created OS            03 (3) 'Unix'\n+D48E8 Extract Zip Spec      14 (20) '2.0'\n+D48E9 Extract OS            00 (0) 'MS-DOS'\n+D48EA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D436E Compression Method    0008 (8) 'Deflated'\n-D4370 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4374 CRC                   57E394F3 (1474532595)\n-D4378 Compressed Size       000006F4 (1780)\n-D437C Uncompressed Size     0000115C (4444)\n-D4380 Filename Length       0076 (118)\n-D4382 Extra Length          0000 (0)\n-D4384 Comment Length        0000 (0)\n-D4386 Disk Start            0000 (0)\n-D4388 Int File Attributes   0000 (0)\n+D48EC Compression Method    0008 (8) 'Deflated'\n+D48EE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D48F2 CRC                   57E394F3 (1474532595)\n+D48F6 Compressed Size       000006F4 (1780)\n+D48FA Uncompressed Size     0000115C (4444)\n+D48FE Filename Length       0076 (118)\n+D4900 Extra Length          0000 (0)\n+D4902 Comment Length        0000 (0)\n+D4904 Disk Start            0000 (0)\n+D4906 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D438A Ext File Attributes   81A40000 (2175008768)\n+D4908 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D438E Local Header Offset   00021D53 (138579)\n-D4392 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D490C Local Header Offset   00021D21 (138529)\n+D4910 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4392: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4910: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4408 CENTRAL HEADER #317   02014B50 (33639248)\n-D440C Created Zip Spec      14 (20) '2.0'\n-D440D Created OS            03 (3) 'Unix'\n-D440E Extract Zip Spec      14 (20) '2.0'\n-D440F Extract OS            00 (0) 'MS-DOS'\n-D4410 General Purpose Flag  0800 (2048)\n+D4986 CENTRAL HEADER #317   02014B50 (33639248)\n+D498A Created Zip Spec      14 (20) '2.0'\n+D498B Created OS            03 (3) 'Unix'\n+D498C Extract Zip Spec      14 (20) '2.0'\n+D498D Extract OS            00 (0) 'MS-DOS'\n+D498E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4412 Compression Method    0008 (8) 'Deflated'\n-D4414 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4418 CRC                   990AFEE4 (2567634660)\n-D441C Compressed Size       0000042B (1067)\n-D4420 Uncompressed Size     00000807 (2055)\n-D4424 Filename Length       0074 (116)\n-D4426 Extra Length          0000 (0)\n-D4428 Comment Length        0000 (0)\n-D442A Disk Start            0000 (0)\n-D442C Int File Attributes   0000 (0)\n+D4990 Compression Method    0008 (8) 'Deflated'\n+D4992 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4996 CRC                   990AFEE4 (2567634660)\n+D499A Compressed Size       0000042B (1067)\n+D499E Uncompressed Size     00000807 (2055)\n+D49A2 Filename Length       0074 (116)\n+D49A4 Extra Length          0000 (0)\n+D49A6 Comment Length        0000 (0)\n+D49A8 Disk Start            0000 (0)\n+D49AA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D442E Ext File Attributes   81A40000 (2175008768)\n+D49AC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4432 Local Header Offset   000224DB (140507)\n-D4436 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D49B0 Local Header Offset   000224A9 (140457)\n+D49B4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4436: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD49B4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D44AA CENTRAL HEADER #318   02014B50 (33639248)\n-D44AE Created Zip Spec      14 (20) '2.0'\n-D44AF Created OS            03 (3) 'Unix'\n-D44B0 Extract Zip Spec      14 (20) '2.0'\n-D44B1 Extract OS            00 (0) 'MS-DOS'\n-D44B2 General Purpose Flag  0800 (2048)\n+D4A28 CENTRAL HEADER #318   02014B50 (33639248)\n+D4A2C Created Zip Spec      14 (20) '2.0'\n+D4A2D Created OS            03 (3) 'Unix'\n+D4A2E Extract Zip Spec      14 (20) '2.0'\n+D4A2F Extract OS            00 (0) 'MS-DOS'\n+D4A30 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D44B4 Compression Method    0008 (8) 'Deflated'\n-D44B6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D44BA CRC                   F6367964 (4130765156)\n-D44BE Compressed Size       0000164C (5708)\n-D44C2 Uncompressed Size     00005103 (20739)\n-D44C6 Filename Length       0086 (134)\n-D44C8 Extra Length          0000 (0)\n-D44CA Comment Length        0000 (0)\n-D44CC Disk Start            0000 (0)\n-D44CE Int File Attributes   0000 (0)\n+D4A32 Compression Method    0008 (8) 'Deflated'\n+D4A34 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4A38 CRC                   F6367964 (4130765156)\n+D4A3C Compressed Size       0000164C (5708)\n+D4A40 Uncompressed Size     00005103 (20739)\n+D4A44 Filename Length       0086 (134)\n+D4A46 Extra Length          0000 (0)\n+D4A48 Comment Length        0000 (0)\n+D4A4A Disk Start            0000 (0)\n+D4A4C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D44D0 Ext File Attributes   81A40000 (2175008768)\n+D4A4E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D44D4 Local Header Offset   00022998 (141720)\n-D44D8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D4A52 Local Header Offset   00022966 (141670)\n+D4A56 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0xD44D8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4A56: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D455E CENTRAL HEADER #319   02014B50 (33639248)\n-D4562 Created Zip Spec      14 (20) '2.0'\n-D4563 Created OS            03 (3) 'Unix'\n-D4564 Extract Zip Spec      14 (20) '2.0'\n-D4565 Extract OS            00 (0) 'MS-DOS'\n-D4566 General Purpose Flag  0800 (2048)\n+D4ADC CENTRAL HEADER #319   02014B50 (33639248)\n+D4AE0 Created Zip Spec      14 (20) '2.0'\n+D4AE1 Created OS            03 (3) 'Unix'\n+D4AE2 Extract Zip Spec      14 (20) '2.0'\n+D4AE3 Extract OS            00 (0) 'MS-DOS'\n+D4AE4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4568 Compression Method    0008 (8) 'Deflated'\n-D456A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D456E CRC                   9EC902FD (2663973629)\n-D4572 Compressed Size       000010B5 (4277)\n-D4576 Uncompressed Size     00003DB9 (15801)\n-D457A Filename Length       0080 (128)\n-D457C Extra Length          0000 (0)\n-D457E Comment Length        0000 (0)\n-D4580 Disk Start            0000 (0)\n-D4582 Int File Attributes   0000 (0)\n+D4AE6 Compression Method    0008 (8) 'Deflated'\n+D4AE8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4AEC CRC                   9EC902FD (2663973629)\n+D4AF0 Compressed Size       000010B5 (4277)\n+D4AF4 Uncompressed Size     00003DB9 (15801)\n+D4AF8 Filename Length       0080 (128)\n+D4AFA Extra Length          0000 (0)\n+D4AFC Comment Length        0000 (0)\n+D4AFE Disk Start            0000 (0)\n+D4B00 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4584 Ext File Attributes   81A40000 (2175008768)\n+D4B02 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4588 Local Header Offset   00024088 (147592)\n-D458C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4B06 Local Header Offset   00024056 (147542)\n+D4B0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD458C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4B0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D460C CENTRAL HEADER #320   02014B50 (33639248)\n-D4610 Created Zip Spec      14 (20) '2.0'\n-D4611 Created OS            03 (3) 'Unix'\n-D4612 Extract Zip Spec      14 (20) '2.0'\n-D4613 Extract OS            00 (0) 'MS-DOS'\n-D4614 General Purpose Flag  0800 (2048)\n+D4B8A CENTRAL HEADER #320   02014B50 (33639248)\n+D4B8E Created Zip Spec      14 (20) '2.0'\n+D4B8F Created OS            03 (3) 'Unix'\n+D4B90 Extract Zip Spec      14 (20) '2.0'\n+D4B91 Extract OS            00 (0) 'MS-DOS'\n+D4B92 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4616 Compression Method    0008 (8) 'Deflated'\n-D4618 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D461C CRC                   AD150348 (2903835464)\n-D4620 Compressed Size       0000189A (6298)\n-D4624 Uncompressed Size     00009C3D (39997)\n-D4628 Filename Length       0086 (134)\n-D462A Extra Length          0000 (0)\n-D462C Comment Length        0000 (0)\n-D462E Disk Start            0000 (0)\n-D4630 Int File Attributes   0000 (0)\n+D4B94 Compression Method    0008 (8) 'Deflated'\n+D4B96 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4B9A CRC                   AD150348 (2903835464)\n+D4B9E Compressed Size       0000189A (6298)\n+D4BA2 Uncompressed Size     00009C3D (39997)\n+D4BA6 Filename Length       0086 (134)\n+D4BA8 Extra Length          0000 (0)\n+D4BAA Comment Length        0000 (0)\n+D4BAC Disk Start            0000 (0)\n+D4BAE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4632 Ext File Attributes   81A40000 (2175008768)\n+D4BB0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4636 Local Header Offset   000251DB (152027)\n-D463A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D4BB4 Local Header Offset   000251A9 (151977)\n+D4BB8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XX'\n #\n-# WARNING: Offset 0xD463A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4BB8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D46C0 CENTRAL HEADER #321   02014B50 (33639248)\n-D46C4 Created Zip Spec      14 (20) '2.0'\n-D46C5 Created OS            03 (3) 'Unix'\n-D46C6 Extract Zip Spec      14 (20) '2.0'\n-D46C7 Extract OS            00 (0) 'MS-DOS'\n-D46C8 General Purpose Flag  0800 (2048)\n+D4C3E CENTRAL HEADER #321   02014B50 (33639248)\n+D4C42 Created Zip Spec      14 (20) '2.0'\n+D4C43 Created OS            03 (3) 'Unix'\n+D4C44 Extract Zip Spec      14 (20) '2.0'\n+D4C45 Extract OS            00 (0) 'MS-DOS'\n+D4C46 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D46CA Compression Method    0008 (8) 'Deflated'\n-D46CC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D46D0 CRC                   8BF94713 (2348369683)\n-D46D4 Compressed Size       00000C16 (3094)\n-D46D8 Uncompressed Size     00002C4C (11340)\n-D46DC Filename Length       0080 (128)\n-D46DE Extra Length          0000 (0)\n-D46E0 Comment Length        0000 (0)\n-D46E2 Disk Start            0000 (0)\n-D46E4 Int File Attributes   0000 (0)\n+D4C48 Compression Method    0008 (8) 'Deflated'\n+D4C4A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4C4E CRC                   8BF94713 (2348369683)\n+D4C52 Compressed Size       00000C16 (3094)\n+D4C56 Uncompressed Size     00002C4C (11340)\n+D4C5A Filename Length       0080 (128)\n+D4C5C Extra Length          0000 (0)\n+D4C5E Comment Length        0000 (0)\n+D4C60 Disk Start            0000 (0)\n+D4C62 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D46E6 Ext File Attributes   81A40000 (2175008768)\n+D4C64 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D46EA Local Header Offset   00026B19 (158489)\n-D46EE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4C68 Local Header Offset   00026AE7 (158439)\n+D4C6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD46EE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4C6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D476E CENTRAL HEADER #322   02014B50 (33639248)\n-D4772 Created Zip Spec      14 (20) '2.0'\n-D4773 Created OS            03 (3) 'Unix'\n-D4774 Extract Zip Spec      14 (20) '2.0'\n-D4775 Extract OS            00 (0) 'MS-DOS'\n-D4776 General Purpose Flag  0800 (2048)\n+D4CEC CENTRAL HEADER #322   02014B50 (33639248)\n+D4CF0 Created Zip Spec      14 (20) '2.0'\n+D4CF1 Created OS            03 (3) 'Unix'\n+D4CF2 Extract Zip Spec      14 (20) '2.0'\n+D4CF3 Extract OS            00 (0) 'MS-DOS'\n+D4CF4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4778 Compression Method    0008 (8) 'Deflated'\n-D477A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D477E CRC                   42E654D4 (1122391252)\n-D4782 Compressed Size       00000650 (1616)\n-D4786 Uncompressed Size     00000EFA (3834)\n-D478A Filename Length       0076 (118)\n-D478C Extra Length          0000 (0)\n-D478E Comment Length        0000 (0)\n-D4790 Disk Start            0000 (0)\n-D4792 Int File Attributes   0000 (0)\n+D4CF6 Compression Method    0008 (8) 'Deflated'\n+D4CF8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4CFC CRC                   42E654D4 (1122391252)\n+D4D00 Compressed Size       00000650 (1616)\n+D4D04 Uncompressed Size     00000EFA (3834)\n+D4D08 Filename Length       0076 (118)\n+D4D0A Extra Length          0000 (0)\n+D4D0C Comment Length        0000 (0)\n+D4D0E Disk Start            0000 (0)\n+D4D10 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4794 Ext File Attributes   81A40000 (2175008768)\n+D4D12 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4798 Local Header Offset   000277CD (161741)\n-D479C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4D16 Local Header Offset   0002779B (161691)\n+D4D1A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD479C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4D1A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4812 CENTRAL HEADER #323   02014B50 (33639248)\n-D4816 Created Zip Spec      14 (20) '2.0'\n-D4817 Created OS            03 (3) 'Unix'\n-D4818 Extract Zip Spec      14 (20) '2.0'\n-D4819 Extract OS            00 (0) 'MS-DOS'\n-D481A General Purpose Flag  0800 (2048)\n+D4D90 CENTRAL HEADER #323   02014B50 (33639248)\n+D4D94 Created Zip Spec      14 (20) '2.0'\n+D4D95 Created OS            03 (3) 'Unix'\n+D4D96 Extract Zip Spec      14 (20) '2.0'\n+D4D97 Extract OS            00 (0) 'MS-DOS'\n+D4D98 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D481C Compression Method    0008 (8) 'Deflated'\n-D481E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4822 CRC                   51B4F745 (1370814277)\n-D4826 Compressed Size       0000075A (1882)\n-D482A Uncompressed Size     000016D7 (5847)\n-D482E Filename Length       007C (124)\n-D4830 Extra Length          0000 (0)\n-D4832 Comment Length        0000 (0)\n-D4834 Disk Start            0000 (0)\n-D4836 Int File Attributes   0000 (0)\n+D4D9A Compression Method    0008 (8) 'Deflated'\n+D4D9C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4DA0 CRC                   51B4F745 (1370814277)\n+D4DA4 Compressed Size       0000075A (1882)\n+D4DA8 Uncompressed Size     000016D7 (5847)\n+D4DAC Filename Length       007C (124)\n+D4DAE Extra Length          0000 (0)\n+D4DB0 Comment Length        0000 (0)\n+D4DB2 Disk Start            0000 (0)\n+D4DB4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4838 Ext File Attributes   81A40000 (2175008768)\n+D4DB6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D483C Local Header Offset   00027EB1 (163505)\n-D4840 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4DBA Local Header Offset   00027E7F (163455)\n+D4DBE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4840: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4DBE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D48BC CENTRAL HEADER #324   02014B50 (33639248)\n-D48C0 Created Zip Spec      14 (20) '2.0'\n-D48C1 Created OS            03 (3) 'Unix'\n-D48C2 Extract Zip Spec      14 (20) '2.0'\n-D48C3 Extract OS            00 (0) 'MS-DOS'\n-D48C4 General Purpose Flag  0800 (2048)\n+D4E3A CENTRAL HEADER #324   02014B50 (33639248)\n+D4E3E Created Zip Spec      14 (20) '2.0'\n+D4E3F Created OS            03 (3) 'Unix'\n+D4E40 Extract Zip Spec      14 (20) '2.0'\n+D4E41 Extract OS            00 (0) 'MS-DOS'\n+D4E42 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D48C6 Compression Method    0008 (8) 'Deflated'\n-D48C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D48CC CRC                   357DA477 (897426551)\n-D48D0 Compressed Size       0000039F (927)\n-D48D4 Uncompressed Size     000006C6 (1734)\n-D48D8 Filename Length       0074 (116)\n-D48DA Extra Length          0000 (0)\n-D48DC Comment Length        0000 (0)\n-D48DE Disk Start            0000 (0)\n-D48E0 Int File Attributes   0000 (0)\n+D4E44 Compression Method    0008 (8) 'Deflated'\n+D4E46 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4E4A CRC                   357DA477 (897426551)\n+D4E4E Compressed Size       0000039F (927)\n+D4E52 Uncompressed Size     000006C6 (1734)\n+D4E56 Filename Length       0074 (116)\n+D4E58 Extra Length          0000 (0)\n+D4E5A Comment Length        0000 (0)\n+D4E5C Disk Start            0000 (0)\n+D4E5E Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D48E2 Ext File Attributes   81A40000 (2175008768)\n+D4E60 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D48E6 Local Header Offset   000286A5 (165541)\n-D48EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4E64 Local Header Offset   00028673 (165491)\n+D4E68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD48EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4E68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D495E CENTRAL HEADER #325   02014B50 (33639248)\n-D4962 Created Zip Spec      14 (20) '2.0'\n-D4963 Created OS            03 (3) 'Unix'\n-D4964 Extract Zip Spec      14 (20) '2.0'\n-D4965 Extract OS            00 (0) 'MS-DOS'\n-D4966 General Purpose Flag  0800 (2048)\n+D4EDC CENTRAL HEADER #325   02014B50 (33639248)\n+D4EE0 Created Zip Spec      14 (20) '2.0'\n+D4EE1 Created OS            03 (3) 'Unix'\n+D4EE2 Extract Zip Spec      14 (20) '2.0'\n+D4EE3 Extract OS            00 (0) 'MS-DOS'\n+D4EE4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4968 Compression Method    0008 (8) 'Deflated'\n-D496A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D496E CRC                   F9CAC97B (4190816635)\n-D4972 Compressed Size       000004CB (1227)\n-D4976 Uncompressed Size     000009BC (2492)\n-D497A Filename Length       0071 (113)\n-D497C Extra Length          0000 (0)\n-D497E Comment Length        0000 (0)\n-D4980 Disk Start            0000 (0)\n-D4982 Int File Attributes   0000 (0)\n+D4EE6 Compression Method    0008 (8) 'Deflated'\n+D4EE8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4EEC CRC                   F9CAC97B (4190816635)\n+D4EF0 Compressed Size       000004CB (1227)\n+D4EF4 Uncompressed Size     000009BC (2492)\n+D4EF8 Filename Length       0071 (113)\n+D4EFA Extra Length          0000 (0)\n+D4EFC Comment Length        0000 (0)\n+D4EFE Disk Start            0000 (0)\n+D4F00 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4984 Ext File Attributes   81A40000 (2175008768)\n+D4F02 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4988 Local Header Offset   00028AD6 (166614)\n-D498C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4F06 Local Header Offset   00028AA4 (166564)\n+D4F0A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD498C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4F0A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D49FD CENTRAL HEADER #326   02014B50 (33639248)\n-D4A01 Created Zip Spec      14 (20) '2.0'\n-D4A02 Created OS            03 (3) 'Unix'\n-D4A03 Extract Zip Spec      14 (20) '2.0'\n-D4A04 Extract OS            00 (0) 'MS-DOS'\n-D4A05 General Purpose Flag  0800 (2048)\n+D4F7B CENTRAL HEADER #326   02014B50 (33639248)\n+D4F7F Created Zip Spec      14 (20) '2.0'\n+D4F80 Created OS            03 (3) 'Unix'\n+D4F81 Extract Zip Spec      14 (20) '2.0'\n+D4F82 Extract OS            00 (0) 'MS-DOS'\n+D4F83 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4A07 Compression Method    0008 (8) 'Deflated'\n-D4A09 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4A0D CRC                   9DEB8C8B (2649459851)\n-D4A11 Compressed Size       000004E7 (1255)\n-D4A15 Uncompressed Size     00000A07 (2567)\n-D4A19 Filename Length       0077 (119)\n-D4A1B Extra Length          0000 (0)\n-D4A1D Comment Length        0000 (0)\n-D4A1F Disk Start            0000 (0)\n-D4A21 Int File Attributes   0000 (0)\n+D4F85 Compression Method    0008 (8) 'Deflated'\n+D4F87 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D4F8B CRC                   9DEB8C8B (2649459851)\n+D4F8F Compressed Size       000004E7 (1255)\n+D4F93 Uncompressed Size     00000A07 (2567)\n+D4F97 Filename Length       0077 (119)\n+D4F99 Extra Length          0000 (0)\n+D4F9B Comment Length        0000 (0)\n+D4F9D Disk Start            0000 (0)\n+D4F9F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4A23 Ext File Attributes   81A40000 (2175008768)\n+D4FA1 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4A27 Local Header Offset   00029030 (167984)\n-D4A2B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D4FA5 Local Header Offset   00028FFE (167934)\n+D4FA9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4A2B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD4FA9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4AA2 CENTRAL HEADER #327   02014B50 (33639248)\n-D4AA6 Created Zip Spec      14 (20) '2.0'\n-D4AA7 Created OS            03 (3) 'Unix'\n-D4AA8 Extract Zip Spec      14 (20) '2.0'\n-D4AA9 Extract OS            00 (0) 'MS-DOS'\n-D4AAA General Purpose Flag  0800 (2048)\n+D5020 CENTRAL HEADER #327   02014B50 (33639248)\n+D5024 Created Zip Spec      14 (20) '2.0'\n+D5025 Created OS            03 (3) 'Unix'\n+D5026 Extract Zip Spec      14 (20) '2.0'\n+D5027 Extract OS            00 (0) 'MS-DOS'\n+D5028 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4AAC Compression Method    0008 (8) 'Deflated'\n-D4AAE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4AB2 CRC                   85B17459 (2242999385)\n-D4AB6 Compressed Size       0000060E (1550)\n-D4ABA Uncompressed Size     00000DDE (3550)\n-D4ABE Filename Length       0071 (113)\n-D4AC0 Extra Length          0000 (0)\n-D4AC2 Comment Length        0000 (0)\n-D4AC4 Disk Start            0000 (0)\n-D4AC6 Int File Attributes   0000 (0)\n+D502A Compression Method    0008 (8) 'Deflated'\n+D502C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5030 CRC                   85B17459 (2242999385)\n+D5034 Compressed Size       0000060E (1550)\n+D5038 Uncompressed Size     00000DDE (3550)\n+D503C Filename Length       0071 (113)\n+D503E Extra Length          0000 (0)\n+D5040 Comment Length        0000 (0)\n+D5042 Disk Start            0000 (0)\n+D5044 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4AC8 Ext File Attributes   81A40000 (2175008768)\n+D5046 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4ACC Local Header Offset   000295AC (169388)\n-D4AD0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D504A Local Header Offset   0002957A (169338)\n+D504E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4AD0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD504E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4B41 CENTRAL HEADER #328   02014B50 (33639248)\n-D4B45 Created Zip Spec      14 (20) '2.0'\n-D4B46 Created OS            03 (3) 'Unix'\n-D4B47 Extract Zip Spec      14 (20) '2.0'\n-D4B48 Extract OS            00 (0) 'MS-DOS'\n-D4B49 General Purpose Flag  0800 (2048)\n+D50BF CENTRAL HEADER #328   02014B50 (33639248)\n+D50C3 Created Zip Spec      14 (20) '2.0'\n+D50C4 Created OS            03 (3) 'Unix'\n+D50C5 Extract Zip Spec      14 (20) '2.0'\n+D50C6 Extract OS            00 (0) 'MS-DOS'\n+D50C7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4B4B Compression Method    0008 (8) 'Deflated'\n-D4B4D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4B51 CRC                   9C229073 (2619510899)\n-D4B55 Compressed Size       00000330 (816)\n-D4B59 Uncompressed Size     000005CF (1487)\n-D4B5D Filename Length       007C (124)\n-D4B5F Extra Length          0000 (0)\n-D4B61 Comment Length        0000 (0)\n-D4B63 Disk Start            0000 (0)\n-D4B65 Int File Attributes   0000 (0)\n+D50C9 Compression Method    0008 (8) 'Deflated'\n+D50CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D50CF CRC                   9C229073 (2619510899)\n+D50D3 Compressed Size       00000330 (816)\n+D50D7 Uncompressed Size     000005CF (1487)\n+D50DB Filename Length       007C (124)\n+D50DD Extra Length          0000 (0)\n+D50DF Comment Length        0000 (0)\n+D50E1 Disk Start            0000 (0)\n+D50E3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4B67 Ext File Attributes   81A40000 (2175008768)\n+D50E5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4B6B Local Header Offset   00029C49 (171081)\n-D4B6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D50E9 Local Header Offset   00029C17 (171031)\n+D50ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4B6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD50ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4BEB CENTRAL HEADER #329   02014B50 (33639248)\n-D4BEF Created Zip Spec      14 (20) '2.0'\n-D4BF0 Created OS            03 (3) 'Unix'\n-D4BF1 Extract Zip Spec      14 (20) '2.0'\n-D4BF2 Extract OS            00 (0) 'MS-DOS'\n-D4BF3 General Purpose Flag  0800 (2048)\n+D5169 CENTRAL HEADER #329   02014B50 (33639248)\n+D516D Created Zip Spec      14 (20) '2.0'\n+D516E Created OS            03 (3) 'Unix'\n+D516F Extract Zip Spec      14 (20) '2.0'\n+D5170 Extract OS            00 (0) 'MS-DOS'\n+D5171 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4BF5 Compression Method    0008 (8) 'Deflated'\n-D4BF7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4BFB CRC                   A57691CD (2776011213)\n-D4BFF Compressed Size       00000316 (790)\n-D4C03 Uncompressed Size     000005C2 (1474)\n-D4C07 Filename Length       007C (124)\n-D4C09 Extra Length          0000 (0)\n-D4C0B Comment Length        0000 (0)\n-D4C0D Disk Start            0000 (0)\n-D4C0F Int File Attributes   0000 (0)\n+D5173 Compression Method    0008 (8) 'Deflated'\n+D5175 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5179 CRC                   A57691CD (2776011213)\n+D517D Compressed Size       00000316 (790)\n+D5181 Uncompressed Size     000005C2 (1474)\n+D5185 Filename Length       007C (124)\n+D5187 Extra Length          0000 (0)\n+D5189 Comment Length        0000 (0)\n+D518B Disk Start            0000 (0)\n+D518D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4C11 Ext File Attributes   81A40000 (2175008768)\n+D518F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4C15 Local Header Offset   0002A013 (172051)\n-D4C19 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5193 Local Header Offset   00029FE1 (172001)\n+D5197 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4C19: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5197: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4C95 CENTRAL HEADER #330   02014B50 (33639248)\n-D4C99 Created Zip Spec      14 (20) '2.0'\n-D4C9A Created OS            03 (3) 'Unix'\n-D4C9B Extract Zip Spec      14 (20) '2.0'\n-D4C9C Extract OS            00 (0) 'MS-DOS'\n-D4C9D General Purpose Flag  0800 (2048)\n+D5213 CENTRAL HEADER #330   02014B50 (33639248)\n+D5217 Created Zip Spec      14 (20) '2.0'\n+D5218 Created OS            03 (3) 'Unix'\n+D5219 Extract Zip Spec      14 (20) '2.0'\n+D521A Extract OS            00 (0) 'MS-DOS'\n+D521B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4C9F Compression Method    0008 (8) 'Deflated'\n-D4CA1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4CA5 CRC                   6CD31445 (1825772613)\n-D4CA9 Compressed Size       000003CA (970)\n-D4CAD Uncompressed Size     0000073A (1850)\n-D4CB1 Filename Length       007B (123)\n-D4CB3 Extra Length          0000 (0)\n-D4CB5 Comment Length        0000 (0)\n-D4CB7 Disk Start            0000 (0)\n-D4CB9 Int File Attributes   0000 (0)\n+D521D Compression Method    0008 (8) 'Deflated'\n+D521F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5223 CRC                   6CD31445 (1825772613)\n+D5227 Compressed Size       000003CA (970)\n+D522B Uncompressed Size     0000073A (1850)\n+D522F Filename Length       007B (123)\n+D5231 Extra Length          0000 (0)\n+D5233 Comment Length        0000 (0)\n+D5235 Disk Start            0000 (0)\n+D5237 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4CBB Ext File Attributes   81A40000 (2175008768)\n+D5239 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4CBF Local Header Offset   0002A3C3 (172995)\n-D4CC3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D523D Local Header Offset   0002A391 (172945)\n+D5241 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4CC3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5241: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4D3E CENTRAL HEADER #331   02014B50 (33639248)\n-D4D42 Created Zip Spec      14 (20) '2.0'\n-D4D43 Created OS            03 (3) 'Unix'\n-D4D44 Extract Zip Spec      14 (20) '2.0'\n-D4D45 Extract OS            00 (0) 'MS-DOS'\n-D4D46 General Purpose Flag  0800 (2048)\n+D52BC CENTRAL HEADER #331   02014B50 (33639248)\n+D52C0 Created Zip Spec      14 (20) '2.0'\n+D52C1 Created OS            03 (3) 'Unix'\n+D52C2 Extract Zip Spec      14 (20) '2.0'\n+D52C3 Extract OS            00 (0) 'MS-DOS'\n+D52C4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4D48 Compression Method    0008 (8) 'Deflated'\n-D4D4A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4D4E CRC                   C97DF8D6 (3380476118)\n-D4D52 Compressed Size       00000522 (1314)\n-D4D56 Uncompressed Size     00000A92 (2706)\n-D4D5A Filename Length       0079 (121)\n-D4D5C Extra Length          0000 (0)\n-D4D5E Comment Length        0000 (0)\n-D4D60 Disk Start            0000 (0)\n-D4D62 Int File Attributes   0000 (0)\n+D52C6 Compression Method    0008 (8) 'Deflated'\n+D52C8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D52CC CRC                   C97DF8D6 (3380476118)\n+D52D0 Compressed Size       00000522 (1314)\n+D52D4 Uncompressed Size     00000A92 (2706)\n+D52D8 Filename Length       0079 (121)\n+D52DA Extra Length          0000 (0)\n+D52DC Comment Length        0000 (0)\n+D52DE Disk Start            0000 (0)\n+D52E0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4D64 Ext File Attributes   81A40000 (2175008768)\n+D52E2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4D68 Local Header Offset   0002A826 (174118)\n-D4D6C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D52E6 Local Header Offset   0002A7F4 (174068)\n+D52EA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4D6C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD52EA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4DE5 CENTRAL HEADER #332   02014B50 (33639248)\n-D4DE9 Created Zip Spec      14 (20) '2.0'\n-D4DEA Created OS            03 (3) 'Unix'\n-D4DEB Extract Zip Spec      14 (20) '2.0'\n-D4DEC Extract OS            00 (0) 'MS-DOS'\n-D4DED General Purpose Flag  0800 (2048)\n+D5363 CENTRAL HEADER #332   02014B50 (33639248)\n+D5367 Created Zip Spec      14 (20) '2.0'\n+D5368 Created OS            03 (3) 'Unix'\n+D5369 Extract Zip Spec      14 (20) '2.0'\n+D536A Extract OS            00 (0) 'MS-DOS'\n+D536B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4DEF Compression Method    0008 (8) 'Deflated'\n-D4DF1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4DF5 CRC                   0B04A112 (184852754)\n-D4DF9 Compressed Size       000003C7 (967)\n-D4DFD Uncompressed Size     00000795 (1941)\n-D4E01 Filename Length       006E (110)\n-D4E03 Extra Length          0000 (0)\n-D4E05 Comment Length        0000 (0)\n-D4E07 Disk Start            0000 (0)\n-D4E09 Int File Attributes   0000 (0)\n+D536D Compression Method    0008 (8) 'Deflated'\n+D536F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5373 CRC                   0B04A112 (184852754)\n+D5377 Compressed Size       000003C7 (967)\n+D537B Uncompressed Size     00000795 (1941)\n+D537F Filename Length       006E (110)\n+D5381 Extra Length          0000 (0)\n+D5383 Comment Length        0000 (0)\n+D5385 Disk Start            0000 (0)\n+D5387 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4E0B Ext File Attributes   81A40000 (2175008768)\n+D5389 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4E0F Local Header Offset   0002ADDF (175583)\n-D4E13 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D538D Local Header Offset   0002ADAD (175533)\n+D5391 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4E13: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5391: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4E81 CENTRAL HEADER #333   02014B50 (33639248)\n-D4E85 Created Zip Spec      14 (20) '2.0'\n-D4E86 Created OS            03 (3) 'Unix'\n-D4E87 Extract Zip Spec      14 (20) '2.0'\n-D4E88 Extract OS            00 (0) 'MS-DOS'\n-D4E89 General Purpose Flag  0800 (2048)\n+D53FF CENTRAL HEADER #333   02014B50 (33639248)\n+D5403 Created Zip Spec      14 (20) '2.0'\n+D5404 Created OS            03 (3) 'Unix'\n+D5405 Extract Zip Spec      14 (20) '2.0'\n+D5406 Extract OS            00 (0) 'MS-DOS'\n+D5407 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4E8B Compression Method    0008 (8) 'Deflated'\n-D4E8D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4E91 CRC                   9A51A289 (2589041289)\n-D4E95 Compressed Size       00000425 (1061)\n-D4E99 Uncompressed Size     000008AB (2219)\n-D4E9D Filename Length       0082 (130)\n-D4E9F Extra Length          0000 (0)\n-D4EA1 Comment Length        0000 (0)\n-D4EA3 Disk Start            0000 (0)\n-D4EA5 Int File Attributes   0000 (0)\n+D5409 Compression Method    0008 (8) 'Deflated'\n+D540B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D540F CRC                   9A51A289 (2589041289)\n+D5413 Compressed Size       00000425 (1061)\n+D5417 Uncompressed Size     000008AB (2219)\n+D541B Filename Length       0082 (130)\n+D541D Extra Length          0000 (0)\n+D541F Comment Length        0000 (0)\n+D5421 Disk Start            0000 (0)\n+D5423 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4EA7 Ext File Attributes   81A40000 (2175008768)\n+D5425 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4EAB Local Header Offset   0002B232 (176690)\n-D4EAF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5429 Local Header Offset   0002B200 (176640)\n+D542D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4EAF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD542D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4F31 CENTRAL HEADER #334   02014B50 (33639248)\n-D4F35 Created Zip Spec      14 (20) '2.0'\n-D4F36 Created OS            03 (3) 'Unix'\n-D4F37 Extract Zip Spec      14 (20) '2.0'\n-D4F38 Extract OS            00 (0) 'MS-DOS'\n-D4F39 General Purpose Flag  0800 (2048)\n+D54AF CENTRAL HEADER #334   02014B50 (33639248)\n+D54B3 Created Zip Spec      14 (20) '2.0'\n+D54B4 Created OS            03 (3) 'Unix'\n+D54B5 Extract Zip Spec      14 (20) '2.0'\n+D54B6 Extract OS            00 (0) 'MS-DOS'\n+D54B7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4F3B Compression Method    0008 (8) 'Deflated'\n-D4F3D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4F41 CRC                   BEAE3D9C (3199090076)\n-D4F45 Compressed Size       0000127D (4733)\n-D4F49 Uncompressed Size     0000396F (14703)\n-D4F4D Filename Length       0063 (99)\n-D4F4F Extra Length          0000 (0)\n-D4F51 Comment Length        0000 (0)\n-D4F53 Disk Start            0000 (0)\n-D4F55 Int File Attributes   0000 (0)\n+D54B9 Compression Method    0008 (8) 'Deflated'\n+D54BB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D54BF CRC                   BEAE3D9C (3199090076)\n+D54C3 Compressed Size       0000127D (4733)\n+D54C7 Uncompressed Size     0000396F (14703)\n+D54CB Filename Length       0063 (99)\n+D54CD Extra Length          0000 (0)\n+D54CF Comment Length        0000 (0)\n+D54D1 Disk Start            0000 (0)\n+D54D3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4F57 Ext File Attributes   81A40000 (2175008768)\n+D54D5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4F5B Local Header Offset   0002B6F7 (177911)\n-D4F5F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D54D9 Local Header Offset   0002B6C5 (177861)\n+D54DD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4F5F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD54DD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D4FC2 CENTRAL HEADER #335   02014B50 (33639248)\n-D4FC6 Created Zip Spec      14 (20) '2.0'\n-D4FC7 Created OS            03 (3) 'Unix'\n-D4FC8 Extract Zip Spec      14 (20) '2.0'\n-D4FC9 Extract OS            00 (0) 'MS-DOS'\n-D4FCA General Purpose Flag  0800 (2048)\n+D5540 CENTRAL HEADER #335   02014B50 (33639248)\n+D5544 Created Zip Spec      14 (20) '2.0'\n+D5545 Created OS            03 (3) 'Unix'\n+D5546 Extract Zip Spec      14 (20) '2.0'\n+D5547 Extract OS            00 (0) 'MS-DOS'\n+D5548 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D4FCC Compression Method    0008 (8) 'Deflated'\n-D4FCE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D4FD2 CRC                   29D620BA (701898938)\n-D4FD6 Compressed Size       00000BC2 (3010)\n-D4FDA Uncompressed Size     00002421 (9249)\n-D4FDE Filename Length       0080 (128)\n-D4FE0 Extra Length          0000 (0)\n-D4FE2 Comment Length        0000 (0)\n-D4FE4 Disk Start            0000 (0)\n-D4FE6 Int File Attributes   0000 (0)\n+D554A Compression Method    0008 (8) 'Deflated'\n+D554C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5550 CRC                   29D620BA (701898938)\n+D5554 Compressed Size       00000BC2 (3010)\n+D5558 Uncompressed Size     00002421 (9249)\n+D555C Filename Length       0080 (128)\n+D555E Extra Length          0000 (0)\n+D5560 Comment Length        0000 (0)\n+D5562 Disk Start            0000 (0)\n+D5564 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D4FE8 Ext File Attributes   81A40000 (2175008768)\n+D5566 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D4FEC Local Header Offset   0002C9F5 (182773)\n-D4FF0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D556A Local Header Offset   0002C9C3 (182723)\n+D556E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD4FF0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD556E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5070 CENTRAL HEADER #336   02014B50 (33639248)\n-D5074 Created Zip Spec      14 (20) '2.0'\n-D5075 Created OS            03 (3) 'Unix'\n-D5076 Extract Zip Spec      14 (20) '2.0'\n-D5077 Extract OS            00 (0) 'MS-DOS'\n-D5078 General Purpose Flag  0800 (2048)\n+D55EE CENTRAL HEADER #336   02014B50 (33639248)\n+D55F2 Created Zip Spec      14 (20) '2.0'\n+D55F3 Created OS            03 (3) 'Unix'\n+D55F4 Extract Zip Spec      14 (20) '2.0'\n+D55F5 Extract OS            00 (0) 'MS-DOS'\n+D55F6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D507A Compression Method    0008 (8) 'Deflated'\n-D507C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5080 CRC                   9ED7BE90 (2664939152)\n-D5084 Compressed Size       00001217 (4631)\n-D5088 Uncompressed Size     000036E7 (14055)\n-D508C Filename Length       0079 (121)\n-D508E Extra Length          0000 (0)\n-D5090 Comment Length        0000 (0)\n-D5092 Disk Start            0000 (0)\n-D5094 Int File Attributes   0000 (0)\n+D55F8 Compression Method    0008 (8) 'Deflated'\n+D55FA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D55FE CRC                   9ED7BE90 (2664939152)\n+D5602 Compressed Size       00001217 (4631)\n+D5606 Uncompressed Size     000036E7 (14055)\n+D560A Filename Length       0079 (121)\n+D560C Extra Length          0000 (0)\n+D560E Comment Length        0000 (0)\n+D5610 Disk Start            0000 (0)\n+D5612 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5096 Ext File Attributes   81A40000 (2175008768)\n+D5614 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D509A Local Header Offset   0002D655 (185941)\n-D509E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5618 Local Header Offset   0002D623 (185891)\n+D561C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD509E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD561C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5117 CENTRAL HEADER #337   02014B50 (33639248)\n-D511B Created Zip Spec      14 (20) '2.0'\n-D511C Created OS            03 (3) 'Unix'\n-D511D Extract Zip Spec      14 (20) '2.0'\n-D511E Extract OS            00 (0) 'MS-DOS'\n-D511F General Purpose Flag  0800 (2048)\n+D5695 CENTRAL HEADER #337   02014B50 (33639248)\n+D5699 Created Zip Spec      14 (20) '2.0'\n+D569A Created OS            03 (3) 'Unix'\n+D569B Extract Zip Spec      14 (20) '2.0'\n+D569C Extract OS            00 (0) 'MS-DOS'\n+D569D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5121 Compression Method    0008 (8) 'Deflated'\n-D5123 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5127 CRC                   B51FDD91 (3038764433)\n-D512B Compressed Size       0000156C (5484)\n-D512F Uncompressed Size     00004792 (18322)\n-D5133 Filename Length       0079 (121)\n-D5135 Extra Length          0000 (0)\n-D5137 Comment Length        0000 (0)\n-D5139 Disk Start            0000 (0)\n-D513B Int File Attributes   0000 (0)\n+D569F Compression Method    0008 (8) 'Deflated'\n+D56A1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D56A5 CRC                   B51FDD91 (3038764433)\n+D56A9 Compressed Size       0000156C (5484)\n+D56AD Uncompressed Size     00004792 (18322)\n+D56B1 Filename Length       0079 (121)\n+D56B3 Extra Length          0000 (0)\n+D56B5 Comment Length        0000 (0)\n+D56B7 Disk Start            0000 (0)\n+D56B9 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D513D Ext File Attributes   81A40000 (2175008768)\n+D56BB Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5141 Local Header Offset   0002E903 (190723)\n-D5145 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D56BF Local Header Offset   0002E8D1 (190673)\n+D56C3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5145: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD56C3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D51BE CENTRAL HEADER #338   02014B50 (33639248)\n-D51C2 Created Zip Spec      14 (20) '2.0'\n-D51C3 Created OS            03 (3) 'Unix'\n-D51C4 Extract Zip Spec      14 (20) '2.0'\n-D51C5 Extract OS            00 (0) 'MS-DOS'\n-D51C6 General Purpose Flag  0800 (2048)\n+D573C CENTRAL HEADER #338   02014B50 (33639248)\n+D5740 Created Zip Spec      14 (20) '2.0'\n+D5741 Created OS            03 (3) 'Unix'\n+D5742 Extract Zip Spec      14 (20) '2.0'\n+D5743 Extract OS            00 (0) 'MS-DOS'\n+D5744 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D51C8 Compression Method    0008 (8) 'Deflated'\n-D51CA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D51CE CRC                   27CFA48B (667919499)\n-D51D2 Compressed Size       000018CC (6348)\n-D51D6 Uncompressed Size     00005DDC (24028)\n-D51DA Filename Length       007B (123)\n-D51DC Extra Length          0000 (0)\n-D51DE Comment Length        0000 (0)\n-D51E0 Disk Start            0000 (0)\n-D51E2 Int File Attributes   0000 (0)\n+D5746 Compression Method    0008 (8) 'Deflated'\n+D5748 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D574C CRC                   27CFA48B (667919499)\n+D5750 Compressed Size       000018CC (6348)\n+D5754 Uncompressed Size     00005DDC (24028)\n+D5758 Filename Length       007B (123)\n+D575A Extra Length          0000 (0)\n+D575C Comment Length        0000 (0)\n+D575E Disk Start            0000 (0)\n+D5760 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D51E4 Ext File Attributes   81A40000 (2175008768)\n+D5762 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D51E8 Local Header Offset   0002FF06 (196358)\n-D51EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5766 Local Header Offset   0002FED4 (196308)\n+D576A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD51EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD576A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5267 CENTRAL HEADER #339   02014B50 (33639248)\n-D526B Created Zip Spec      14 (20) '2.0'\n-D526C Created OS            03 (3) 'Unix'\n-D526D Extract Zip Spec      14 (20) '2.0'\n-D526E Extract OS            00 (0) 'MS-DOS'\n-D526F General Purpose Flag  0800 (2048)\n+D57E5 CENTRAL HEADER #339   02014B50 (33639248)\n+D57E9 Created Zip Spec      14 (20) '2.0'\n+D57EA Created OS            03 (3) 'Unix'\n+D57EB Extract Zip Spec      14 (20) '2.0'\n+D57EC Extract OS            00 (0) 'MS-DOS'\n+D57ED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5271 Compression Method    0008 (8) 'Deflated'\n-D5273 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5277 CRC                   620AB78F (1644869519)\n-D527B Compressed Size       000012CF (4815)\n-D527F Uncompressed Size     00003B3A (15162)\n-D5283 Filename Length       007F (127)\n-D5285 Extra Length          0000 (0)\n-D5287 Comment Length        0000 (0)\n-D5289 Disk Start            0000 (0)\n-D528B Int File Attributes   0000 (0)\n+D57EF Compression Method    0008 (8) 'Deflated'\n+D57F1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D57F5 CRC                   620AB78F (1644869519)\n+D57F9 Compressed Size       000012CF (4815)\n+D57FD Uncompressed Size     00003B3A (15162)\n+D5801 Filename Length       007F (127)\n+D5803 Extra Length          0000 (0)\n+D5805 Comment Length        0000 (0)\n+D5807 Disk Start            0000 (0)\n+D5809 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D528D Ext File Attributes   81A40000 (2175008768)\n+D580B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5291 Local Header Offset   0003186B (202859)\n-D5295 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D580F Local Header Offset   00031839 (202809)\n+D5813 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5295: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5813: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5314 CENTRAL HEADER #340   02014B50 (33639248)\n-D5318 Created Zip Spec      14 (20) '2.0'\n-D5319 Created OS            03 (3) 'Unix'\n-D531A Extract Zip Spec      14 (20) '2.0'\n-D531B Extract OS            00 (0) 'MS-DOS'\n-D531C General Purpose Flag  0800 (2048)\n+D5892 CENTRAL HEADER #340   02014B50 (33639248)\n+D5896 Created Zip Spec      14 (20) '2.0'\n+D5897 Created OS            03 (3) 'Unix'\n+D5898 Extract Zip Spec      14 (20) '2.0'\n+D5899 Extract OS            00 (0) 'MS-DOS'\n+D589A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D531E Compression Method    0008 (8) 'Deflated'\n-D5320 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5324 CRC                   937A07E6 (2474248166)\n-D5328 Compressed Size       000013A9 (5033)\n-D532C Uncompressed Size     00004869 (18537)\n-D5330 Filename Length       007F (127)\n-D5332 Extra Length          0000 (0)\n-D5334 Comment Length        0000 (0)\n-D5336 Disk Start            0000 (0)\n-D5338 Int File Attributes   0000 (0)\n+D589C Compression Method    0008 (8) 'Deflated'\n+D589E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D58A2 CRC                   937A07E6 (2474248166)\n+D58A6 Compressed Size       000013A9 (5033)\n+D58AA Uncompressed Size     00004869 (18537)\n+D58AE Filename Length       007F (127)\n+D58B0 Extra Length          0000 (0)\n+D58B2 Comment Length        0000 (0)\n+D58B4 Disk Start            0000 (0)\n+D58B6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D533A Ext File Attributes   81A40000 (2175008768)\n+D58B8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D533E Local Header Offset   00032BD7 (207831)\n-D5342 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D58BC Local Header Offset   00032BA5 (207781)\n+D58C0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5342: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD58C0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D53C1 CENTRAL HEADER #341   02014B50 (33639248)\n-D53C5 Created Zip Spec      14 (20) '2.0'\n-D53C6 Created OS            03 (3) 'Unix'\n-D53C7 Extract Zip Spec      14 (20) '2.0'\n-D53C8 Extract OS            00 (0) 'MS-DOS'\n-D53C9 General Purpose Flag  0800 (2048)\n+D593F CENTRAL HEADER #341   02014B50 (33639248)\n+D5943 Created Zip Spec      14 (20) '2.0'\n+D5944 Created OS            03 (3) 'Unix'\n+D5945 Extract Zip Spec      14 (20) '2.0'\n+D5946 Extract OS            00 (0) 'MS-DOS'\n+D5947 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D53CB Compression Method    0008 (8) 'Deflated'\n-D53CD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D53D1 CRC                   53DFF1D7 (1407185367)\n-D53D5 Compressed Size       00000442 (1090)\n-D53D9 Uncompressed Size     00000ADF (2783)\n-D53DD Filename Length       0083 (131)\n-D53DF Extra Length          0000 (0)\n-D53E1 Comment Length        0000 (0)\n-D53E3 Disk Start            0000 (0)\n-D53E5 Int File Attributes   0000 (0)\n+D5949 Compression Method    0008 (8) 'Deflated'\n+D594B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D594F CRC                   53DFF1D7 (1407185367)\n+D5953 Compressed Size       00000442 (1090)\n+D5957 Uncompressed Size     00000ADF (2783)\n+D595B Filename Length       0083 (131)\n+D595D Extra Length          0000 (0)\n+D595F Comment Length        0000 (0)\n+D5961 Disk Start            0000 (0)\n+D5963 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D53E7 Ext File Attributes   81A40000 (2175008768)\n+D5965 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D53EB Local Header Offset   0003401D (213021)\n-D53EF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5969 Local Header Offset   00033FEB (212971)\n+D596D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD53EF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD596D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5472 CENTRAL HEADER #342   02014B50 (33639248)\n-D5476 Created Zip Spec      14 (20) '2.0'\n-D5477 Created OS            03 (3) 'Unix'\n-D5478 Extract Zip Spec      14 (20) '2.0'\n-D5479 Extract OS            00 (0) 'MS-DOS'\n-D547A General Purpose Flag  0800 (2048)\n+D59F0 CENTRAL HEADER #342   02014B50 (33639248)\n+D59F4 Created Zip Spec      14 (20) '2.0'\n+D59F5 Created OS            03 (3) 'Unix'\n+D59F6 Extract Zip Spec      14 (20) '2.0'\n+D59F7 Extract OS            00 (0) 'MS-DOS'\n+D59F8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D547C Compression Method    0008 (8) 'Deflated'\n-D547E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5482 CRC                   6D3A5445 (1832539205)\n-D5486 Compressed Size       000003FF (1023)\n-D548A Uncompressed Size     00000939 (2361)\n-D548E Filename Length       007F (127)\n-D5490 Extra Length          0000 (0)\n-D5492 Comment Length        0000 (0)\n-D5494 Disk Start            0000 (0)\n-D5496 Int File Attributes   0000 (0)\n+D59FA Compression Method    0008 (8) 'Deflated'\n+D59FC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5A00 CRC                   6D3A5445 (1832539205)\n+D5A04 Compressed Size       000003FF (1023)\n+D5A08 Uncompressed Size     00000939 (2361)\n+D5A0C Filename Length       007F (127)\n+D5A0E Extra Length          0000 (0)\n+D5A10 Comment Length        0000 (0)\n+D5A12 Disk Start            0000 (0)\n+D5A14 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5498 Ext File Attributes   81A40000 (2175008768)\n+D5A16 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D549C Local Header Offset   00034500 (214272)\n-D54A0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5A1A Local Header Offset   000344CE (214222)\n+D5A1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD54A0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5A1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D551F CENTRAL HEADER #343   02014B50 (33639248)\n-D5523 Created Zip Spec      14 (20) '2.0'\n-D5524 Created OS            03 (3) 'Unix'\n-D5525 Extract Zip Spec      14 (20) '2.0'\n-D5526 Extract OS            00 (0) 'MS-DOS'\n-D5527 General Purpose Flag  0800 (2048)\n+D5A9D CENTRAL HEADER #343   02014B50 (33639248)\n+D5AA1 Created Zip Spec      14 (20) '2.0'\n+D5AA2 Created OS            03 (3) 'Unix'\n+D5AA3 Extract Zip Spec      14 (20) '2.0'\n+D5AA4 Extract OS            00 (0) 'MS-DOS'\n+D5AA5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5529 Compression Method    0008 (8) 'Deflated'\n-D552B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D552F CRC                   5C6B1924 (1550522660)\n-D5533 Compressed Size       000005D8 (1496)\n-D5537 Uncompressed Size     00000DDD (3549)\n-D553B Filename Length       008E (142)\n-D553D Extra Length          0000 (0)\n-D553F Comment Length        0000 (0)\n-D5541 Disk Start            0000 (0)\n-D5543 Int File Attributes   0000 (0)\n+D5AA7 Compression Method    0008 (8) 'Deflated'\n+D5AA9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5AAD CRC                   5C6B1924 (1550522660)\n+D5AB1 Compressed Size       000005D8 (1496)\n+D5AB5 Uncompressed Size     00000DDD (3549)\n+D5AB9 Filename Length       008E (142)\n+D5ABB Extra Length          0000 (0)\n+D5ABD Comment Length        0000 (0)\n+D5ABF Disk Start            0000 (0)\n+D5AC1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5545 Ext File Attributes   81A40000 (2175008768)\n+D5AC3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5549 Local Header Offset   0003499C (215452)\n-D554D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D5AC7 Local Header Offset   0003496A (215402)\n+D5ACB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXX'\n #\n-# WARNING: Offset 0xD554D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5ACB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D55DB CENTRAL HEADER #344   02014B50 (33639248)\n-D55DF Created Zip Spec      14 (20) '2.0'\n-D55E0 Created OS            03 (3) 'Unix'\n-D55E1 Extract Zip Spec      14 (20) '2.0'\n-D55E2 Extract OS            00 (0) 'MS-DOS'\n-D55E3 General Purpose Flag  0800 (2048)\n+D5B59 CENTRAL HEADER #344   02014B50 (33639248)\n+D5B5D Created Zip Spec      14 (20) '2.0'\n+D5B5E Created OS            03 (3) 'Unix'\n+D5B5F Extract Zip Spec      14 (20) '2.0'\n+D5B60 Extract OS            00 (0) 'MS-DOS'\n+D5B61 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D55E5 Compression Method    0008 (8) 'Deflated'\n-D55E7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D55EB CRC                   C7DF88BB (3353315515)\n-D55EF Compressed Size       00001C38 (7224)\n-D55F3 Uncompressed Size     00009335 (37685)\n-D55F7 Filename Length       0079 (121)\n-D55F9 Extra Length          0000 (0)\n-D55FB Comment Length        0000 (0)\n-D55FD Disk Start            0000 (0)\n-D55FF Int File Attributes   0000 (0)\n+D5B63 Compression Method    0008 (8) 'Deflated'\n+D5B65 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5B69 CRC                   C7DF88BB (3353315515)\n+D5B6D Compressed Size       00001C38 (7224)\n+D5B71 Uncompressed Size     00009335 (37685)\n+D5B75 Filename Length       0079 (121)\n+D5B77 Extra Length          0000 (0)\n+D5B79 Comment Length        0000 (0)\n+D5B7B Disk Start            0000 (0)\n+D5B7D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5601 Ext File Attributes   81A40000 (2175008768)\n+D5B7F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5605 Local Header Offset   00035020 (217120)\n-D5609 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5B83 Local Header Offset   00034FEE (217070)\n+D5B87 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5609: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5B87: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5682 CENTRAL HEADER #345   02014B50 (33639248)\n-D5686 Created Zip Spec      14 (20) '2.0'\n-D5687 Created OS            03 (3) 'Unix'\n-D5688 Extract Zip Spec      14 (20) '2.0'\n-D5689 Extract OS            00 (0) 'MS-DOS'\n-D568A General Purpose Flag  0800 (2048)\n+D5C00 CENTRAL HEADER #345   02014B50 (33639248)\n+D5C04 Created Zip Spec      14 (20) '2.0'\n+D5C05 Created OS            03 (3) 'Unix'\n+D5C06 Extract Zip Spec      14 (20) '2.0'\n+D5C07 Extract OS            00 (0) 'MS-DOS'\n+D5C08 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D568C Compression Method    0008 (8) 'Deflated'\n-D568E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5692 CRC                   217BBE0B (561757707)\n-D5696 Compressed Size       00000651 (1617)\n-D569A Uncompressed Size     00001BB1 (7089)\n-D569E Filename Length       0082 (130)\n-D56A0 Extra Length          0000 (0)\n-D56A2 Comment Length        0000 (0)\n-D56A4 Disk Start            0000 (0)\n-D56A6 Int File Attributes   0000 (0)\n+D5C0A Compression Method    0008 (8) 'Deflated'\n+D5C0C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5C10 CRC                   217BBE0B (561757707)\n+D5C14 Compressed Size       00000651 (1617)\n+D5C18 Uncompressed Size     00001BB1 (7089)\n+D5C1C Filename Length       0082 (130)\n+D5C1E Extra Length          0000 (0)\n+D5C20 Comment Length        0000 (0)\n+D5C22 Disk Start            0000 (0)\n+D5C24 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D56A8 Ext File Attributes   81A40000 (2175008768)\n+D5C26 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D56AC Local Header Offset   00036CEF (224495)\n-D56B0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5C2A Local Header Offset   00036CBD (224445)\n+D5C2E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD56B0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5C2E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5732 CENTRAL HEADER #346   02014B50 (33639248)\n-D5736 Created Zip Spec      14 (20) '2.0'\n-D5737 Created OS            03 (3) 'Unix'\n-D5738 Extract Zip Spec      14 (20) '2.0'\n-D5739 Extract OS            00 (0) 'MS-DOS'\n-D573A General Purpose Flag  0800 (2048)\n+D5CB0 CENTRAL HEADER #346   02014B50 (33639248)\n+D5CB4 Created Zip Spec      14 (20) '2.0'\n+D5CB5 Created OS            03 (3) 'Unix'\n+D5CB6 Extract Zip Spec      14 (20) '2.0'\n+D5CB7 Extract OS            00 (0) 'MS-DOS'\n+D5CB8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D573C Compression Method    0008 (8) 'Deflated'\n-D573E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5742 CRC                   CF72F6D0 (3480418000)\n-D5746 Compressed Size       00001400 (5120)\n-D574A Uncompressed Size     00004A6A (19050)\n-D574E Filename Length       007F (127)\n-D5750 Extra Length          0000 (0)\n-D5752 Comment Length        0000 (0)\n-D5754 Disk Start            0000 (0)\n-D5756 Int File Attributes   0000 (0)\n+D5CBA Compression Method    0008 (8) 'Deflated'\n+D5CBC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5CC0 CRC                   CF72F6D0 (3480418000)\n+D5CC4 Compressed Size       00001400 (5120)\n+D5CC8 Uncompressed Size     00004A6A (19050)\n+D5CCC Filename Length       007F (127)\n+D5CCE Extra Length          0000 (0)\n+D5CD0 Comment Length        0000 (0)\n+D5CD2 Disk Start            0000 (0)\n+D5CD4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5758 Ext File Attributes   81A40000 (2175008768)\n+D5CD6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D575C Local Header Offset   000373E0 (226272)\n-D5760 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5CDA Local Header Offset   000373AE (226222)\n+D5CDE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5760: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5CDE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D57DF CENTRAL HEADER #347   02014B50 (33639248)\n-D57E3 Created Zip Spec      14 (20) '2.0'\n-D57E4 Created OS            03 (3) 'Unix'\n-D57E5 Extract Zip Spec      14 (20) '2.0'\n-D57E6 Extract OS            00 (0) 'MS-DOS'\n-D57E7 General Purpose Flag  0800 (2048)\n+D5D5D CENTRAL HEADER #347   02014B50 (33639248)\n+D5D61 Created Zip Spec      14 (20) '2.0'\n+D5D62 Created OS            03 (3) 'Unix'\n+D5D63 Extract Zip Spec      14 (20) '2.0'\n+D5D64 Extract OS            00 (0) 'MS-DOS'\n+D5D65 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D57E9 Compression Method    0008 (8) 'Deflated'\n-D57EB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D57EF CRC                   DCEFA272 (3706692210)\n-D57F3 Compressed Size       0000049C (1180)\n-D57F7 Uncompressed Size     000009D3 (2515)\n-D57FB Filename Length       0082 (130)\n-D57FD Extra Length          0000 (0)\n-D57FF Comment Length        0000 (0)\n-D5801 Disk Start            0000 (0)\n-D5803 Int File Attributes   0000 (0)\n+D5D67 Compression Method    0008 (8) 'Deflated'\n+D5D69 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5D6D CRC                   DCEFA272 (3706692210)\n+D5D71 Compressed Size       0000049C (1180)\n+D5D75 Uncompressed Size     000009D3 (2515)\n+D5D79 Filename Length       0082 (130)\n+D5D7B Extra Length          0000 (0)\n+D5D7D Comment Length        0000 (0)\n+D5D7F Disk Start            0000 (0)\n+D5D81 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5805 Ext File Attributes   81A40000 (2175008768)\n+D5D83 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5809 Local Header Offset   0003887D (231549)\n-D580D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5D87 Local Header Offset   0003884B (231499)\n+D5D8B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD580D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5D8B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D588F CENTRAL HEADER #348   02014B50 (33639248)\n-D5893 Created Zip Spec      14 (20) '2.0'\n-D5894 Created OS            03 (3) 'Unix'\n-D5895 Extract Zip Spec      14 (20) '2.0'\n-D5896 Extract OS            00 (0) 'MS-DOS'\n-D5897 General Purpose Flag  0800 (2048)\n+D5E0D CENTRAL HEADER #348   02014B50 (33639248)\n+D5E11 Created Zip Spec      14 (20) '2.0'\n+D5E12 Created OS            03 (3) 'Unix'\n+D5E13 Extract Zip Spec      14 (20) '2.0'\n+D5E14 Extract OS            00 (0) 'MS-DOS'\n+D5E15 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5899 Compression Method    0008 (8) 'Deflated'\n-D589B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D589F CRC                   26E963FE (652829694)\n-D58A3 Compressed Size       0000080C (2060)\n-D58A7 Uncompressed Size     00001276 (4726)\n-D58AB Filename Length       0084 (132)\n-D58AD Extra Length          0000 (0)\n-D58AF Comment Length        0000 (0)\n-D58B1 Disk Start            0000 (0)\n-D58B3 Int File Attributes   0000 (0)\n+D5E17 Compression Method    0008 (8) 'Deflated'\n+D5E19 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5E1D CRC                   26E963FE (652829694)\n+D5E21 Compressed Size       0000080C (2060)\n+D5E25 Uncompressed Size     00001276 (4726)\n+D5E29 Filename Length       0084 (132)\n+D5E2B Extra Length          0000 (0)\n+D5E2D Comment Length        0000 (0)\n+D5E2F Disk Start            0000 (0)\n+D5E31 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D58B5 Ext File Attributes   81A40000 (2175008768)\n+D5E33 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D58B9 Local Header Offset   00038DB9 (232889)\n-D58BD Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D5E37 Local Header Offset   00038D87 (232839)\n+D5E3B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD58BD: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5E3B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5941 CENTRAL HEADER #349   02014B50 (33639248)\n-D5945 Created Zip Spec      14 (20) '2.0'\n-D5946 Created OS            03 (3) 'Unix'\n-D5947 Extract Zip Spec      14 (20) '2.0'\n-D5948 Extract OS            00 (0) 'MS-DOS'\n-D5949 General Purpose Flag  0800 (2048)\n+D5EBF CENTRAL HEADER #349   02014B50 (33639248)\n+D5EC3 Created Zip Spec      14 (20) '2.0'\n+D5EC4 Created OS            03 (3) 'Unix'\n+D5EC5 Extract Zip Spec      14 (20) '2.0'\n+D5EC6 Extract OS            00 (0) 'MS-DOS'\n+D5EC7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D594B Compression Method    0008 (8) 'Deflated'\n-D594D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5951 CRC                   9B32EF54 (2603806548)\n-D5955 Compressed Size       0000175B (5979)\n-D5959 Uncompressed Size     000054C4 (21700)\n-D595D Filename Length       0077 (119)\n-D595F Extra Length          0000 (0)\n-D5961 Comment Length        0000 (0)\n-D5963 Disk Start            0000 (0)\n-D5965 Int File Attributes   0000 (0)\n+D5EC9 Compression Method    0008 (8) 'Deflated'\n+D5ECB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5ECF CRC                   9B32EF54 (2603806548)\n+D5ED3 Compressed Size       0000175B (5979)\n+D5ED7 Uncompressed Size     000054C4 (21700)\n+D5EDB Filename Length       0077 (119)\n+D5EDD Extra Length          0000 (0)\n+D5EDF Comment Length        0000 (0)\n+D5EE1 Disk Start            0000 (0)\n+D5EE3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5967 Ext File Attributes   81A40000 (2175008768)\n+D5EE5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D596B Local Header Offset   00039667 (235111)\n-D596F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5EE9 Local Header Offset   00039635 (235061)\n+D5EED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD596F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5EED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D59E6 CENTRAL HEADER #350   02014B50 (33639248)\n-D59EA Created Zip Spec      14 (20) '2.0'\n-D59EB Created OS            03 (3) 'Unix'\n-D59EC Extract Zip Spec      14 (20) '2.0'\n-D59ED Extract OS            00 (0) 'MS-DOS'\n-D59EE General Purpose Flag  0800 (2048)\n+D5F64 CENTRAL HEADER #350   02014B50 (33639248)\n+D5F68 Created Zip Spec      14 (20) '2.0'\n+D5F69 Created OS            03 (3) 'Unix'\n+D5F6A Extract Zip Spec      14 (20) '2.0'\n+D5F6B Extract OS            00 (0) 'MS-DOS'\n+D5F6C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D59F0 Compression Method    0008 (8) 'Deflated'\n-D59F2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D59F6 CRC                   4975042F (1232405551)\n-D59FA Compressed Size       000009BF (2495)\n-D59FE Uncompressed Size     00001B21 (6945)\n-D5A02 Filename Length       007E (126)\n-D5A04 Extra Length          0000 (0)\n-D5A06 Comment Length        0000 (0)\n-D5A08 Disk Start            0000 (0)\n-D5A0A Int File Attributes   0000 (0)\n+D5F6E Compression Method    0008 (8) 'Deflated'\n+D5F70 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D5F74 CRC                   4975042F (1232405551)\n+D5F78 Compressed Size       000009BF (2495)\n+D5F7C Uncompressed Size     00001B21 (6945)\n+D5F80 Filename Length       007E (126)\n+D5F82 Extra Length          0000 (0)\n+D5F84 Comment Length        0000 (0)\n+D5F86 Disk Start            0000 (0)\n+D5F88 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5A0C Ext File Attributes   81A40000 (2175008768)\n+D5F8A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5A10 Local Header Offset   0003AE57 (241239)\n-D5A14 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D5F8E Local Header Offset   0003AE25 (241189)\n+D5F92 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5A14: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD5F92: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5A92 CENTRAL HEADER #351   02014B50 (33639248)\n-D5A96 Created Zip Spec      14 (20) '2.0'\n-D5A97 Created OS            03 (3) 'Unix'\n-D5A98 Extract Zip Spec      14 (20) '2.0'\n-D5A99 Extract OS            00 (0) 'MS-DOS'\n-D5A9A General Purpose Flag  0800 (2048)\n+D6010 CENTRAL HEADER #351   02014B50 (33639248)\n+D6014 Created Zip Spec      14 (20) '2.0'\n+D6015 Created OS            03 (3) 'Unix'\n+D6016 Extract Zip Spec      14 (20) '2.0'\n+D6017 Extract OS            00 (0) 'MS-DOS'\n+D6018 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5A9C Compression Method    0008 (8) 'Deflated'\n-D5A9E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5AA2 CRC                   27E12F4C (669069132)\n-D5AA6 Compressed Size       0000086D (2157)\n-D5AAA Uncompressed Size     000014EA (5354)\n-D5AAE Filename Length       0081 (129)\n-D5AB0 Extra Length          0000 (0)\n-D5AB2 Comment Length        0000 (0)\n-D5AB4 Disk Start            0000 (0)\n-D5AB6 Int File Attributes   0000 (0)\n+D601A Compression Method    0008 (8) 'Deflated'\n+D601C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6020 CRC                   27E12F4C (669069132)\n+D6024 Compressed Size       0000086D (2157)\n+D6028 Uncompressed Size     000014EA (5354)\n+D602C Filename Length       0081 (129)\n+D602E Extra Length          0000 (0)\n+D6030 Comment Length        0000 (0)\n+D6032 Disk Start            0000 (0)\n+D6034 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5AB8 Ext File Attributes   81A40000 (2175008768)\n+D6036 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5ABC Local Header Offset   0003B8B2 (243890)\n-D5AC0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D603A Local Header Offset   0003B880 (243840)\n+D603E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5AC0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD603E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5B41 CENTRAL HEADER #352   02014B50 (33639248)\n-D5B45 Created Zip Spec      14 (20) '2.0'\n-D5B46 Created OS            03 (3) 'Unix'\n-D5B47 Extract Zip Spec      14 (20) '2.0'\n-D5B48 Extract OS            00 (0) 'MS-DOS'\n-D5B49 General Purpose Flag  0800 (2048)\n+D60BF CENTRAL HEADER #352   02014B50 (33639248)\n+D60C3 Created Zip Spec      14 (20) '2.0'\n+D60C4 Created OS            03 (3) 'Unix'\n+D60C5 Extract Zip Spec      14 (20) '2.0'\n+D60C6 Extract OS            00 (0) 'MS-DOS'\n+D60C7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5B4B Compression Method    0008 (8) 'Deflated'\n-D5B4D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5B51 CRC                   3E8950DE (1049186526)\n-D5B55 Compressed Size       0000120A (4618)\n-D5B59 Uncompressed Size     000036E0 (14048)\n-D5B5D Filename Length       0081 (129)\n-D5B5F Extra Length          0000 (0)\n-D5B61 Comment Length        0000 (0)\n-D5B63 Disk Start            0000 (0)\n-D5B65 Int File Attributes   0000 (0)\n+D60C9 Compression Method    0008 (8) 'Deflated'\n+D60CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D60CF CRC                   3E8950DE (1049186526)\n+D60D3 Compressed Size       0000120A (4618)\n+D60D7 Uncompressed Size     000036E0 (14048)\n+D60DB Filename Length       0081 (129)\n+D60DD Extra Length          0000 (0)\n+D60DF Comment Length        0000 (0)\n+D60E1 Disk Start            0000 (0)\n+D60E3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5B67 Ext File Attributes   81A40000 (2175008768)\n+D60E5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5B6B Local Header Offset   0003C1BE (246206)\n-D5B6F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D60E9 Local Header Offset   0003C18C (246156)\n+D60ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5B6F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD60ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5BF0 CENTRAL HEADER #353   02014B50 (33639248)\n-D5BF4 Created Zip Spec      14 (20) '2.0'\n-D5BF5 Created OS            03 (3) 'Unix'\n-D5BF6 Extract Zip Spec      14 (20) '2.0'\n-D5BF7 Extract OS            00 (0) 'MS-DOS'\n-D5BF8 General Purpose Flag  0800 (2048)\n+D616E CENTRAL HEADER #353   02014B50 (33639248)\n+D6172 Created Zip Spec      14 (20) '2.0'\n+D6173 Created OS            03 (3) 'Unix'\n+D6174 Extract Zip Spec      14 (20) '2.0'\n+D6175 Extract OS            00 (0) 'MS-DOS'\n+D6176 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5BFA Compression Method    0008 (8) 'Deflated'\n-D5BFC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5C00 CRC                   A9B3A4D7 (2847122647)\n-D5C04 Compressed Size       00000A9A (2714)\n-D5C08 Uncompressed Size     00002051 (8273)\n-D5C0C Filename Length       0080 (128)\n-D5C0E Extra Length          0000 (0)\n-D5C10 Comment Length        0000 (0)\n-D5C12 Disk Start            0000 (0)\n-D5C14 Int File Attributes   0000 (0)\n+D6178 Compression Method    0008 (8) 'Deflated'\n+D617A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D617E CRC                   A9B3A4D7 (2847122647)\n+D6182 Compressed Size       00000A9A (2714)\n+D6186 Uncompressed Size     00002051 (8273)\n+D618A Filename Length       0080 (128)\n+D618C Extra Length          0000 (0)\n+D618E Comment Length        0000 (0)\n+D6190 Disk Start            0000 (0)\n+D6192 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5C16 Ext File Attributes   81A40000 (2175008768)\n+D6194 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5C1A Local Header Offset   0003D467 (250983)\n-D5C1E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6198 Local Header Offset   0003D435 (250933)\n+D619C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5C1E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD619C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5C9E CENTRAL HEADER #354   02014B50 (33639248)\n-D5CA2 Created Zip Spec      14 (20) '2.0'\n-D5CA3 Created OS            03 (3) 'Unix'\n-D5CA4 Extract Zip Spec      14 (20) '2.0'\n-D5CA5 Extract OS            00 (0) 'MS-DOS'\n-D5CA6 General Purpose Flag  0800 (2048)\n+D621C CENTRAL HEADER #354   02014B50 (33639248)\n+D6220 Created Zip Spec      14 (20) '2.0'\n+D6221 Created OS            03 (3) 'Unix'\n+D6222 Extract Zip Spec      14 (20) '2.0'\n+D6223 Extract OS            00 (0) 'MS-DOS'\n+D6224 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5CA8 Compression Method    0008 (8) 'Deflated'\n-D5CAA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5CAE CRC                   B12610E6 (2972061926)\n-D5CB2 Compressed Size       00000441 (1089)\n-D5CB6 Uncompressed Size     00000A5B (2651)\n-D5CBA Filename Length       0073 (115)\n-D5CBC Extra Length          0000 (0)\n-D5CBE Comment Length        0000 (0)\n-D5CC0 Disk Start            0000 (0)\n-D5CC2 Int File Attributes   0000 (0)\n+D6226 Compression Method    0008 (8) 'Deflated'\n+D6228 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D622C CRC                   B12610E6 (2972061926)\n+D6230 Compressed Size       00000441 (1089)\n+D6234 Uncompressed Size     00000A5B (2651)\n+D6238 Filename Length       0073 (115)\n+D623A Extra Length          0000 (0)\n+D623C Comment Length        0000 (0)\n+D623E Disk Start            0000 (0)\n+D6240 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5CC4 Ext File Attributes   81A40000 (2175008768)\n+D6242 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5CC8 Local Header Offset   0003DF9F (253855)\n-D5CCC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6246 Local Header Offset   0003DF6D (253805)\n+D624A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5CCC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD624A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5D3F CENTRAL HEADER #355   02014B50 (33639248)\n-D5D43 Created Zip Spec      14 (20) '2.0'\n-D5D44 Created OS            03 (3) 'Unix'\n-D5D45 Extract Zip Spec      14 (20) '2.0'\n-D5D46 Extract OS            00 (0) 'MS-DOS'\n-D5D47 General Purpose Flag  0800 (2048)\n+D62BD CENTRAL HEADER #355   02014B50 (33639248)\n+D62C1 Created Zip Spec      14 (20) '2.0'\n+D62C2 Created OS            03 (3) 'Unix'\n+D62C3 Extract Zip Spec      14 (20) '2.0'\n+D62C4 Extract OS            00 (0) 'MS-DOS'\n+D62C5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5D49 Compression Method    0008 (8) 'Deflated'\n-D5D4B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5D4F CRC                   041CE92B (69003563)\n-D5D53 Compressed Size       0000046E (1134)\n-D5D57 Uncompressed Size     00000B22 (2850)\n-D5D5B Filename Length       008E (142)\n-D5D5D Extra Length          0000 (0)\n-D5D5F Comment Length        0000 (0)\n-D5D61 Disk Start            0000 (0)\n-D5D63 Int File Attributes   0000 (0)\n+D62C7 Compression Method    0008 (8) 'Deflated'\n+D62C9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D62CD CRC                   041CE92B (69003563)\n+D62D1 Compressed Size       0000046E (1134)\n+D62D5 Uncompressed Size     00000B22 (2850)\n+D62D9 Filename Length       008E (142)\n+D62DB Extra Length          0000 (0)\n+D62DD Comment Length        0000 (0)\n+D62DF Disk Start            0000 (0)\n+D62E1 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5D65 Ext File Attributes   81A40000 (2175008768)\n+D62E3 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5D69 Local Header Offset   0003E471 (255089)\n-D5D6D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D62E7 Local Header Offset   0003E43F (255039)\n+D62EB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5D6D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD62EB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5DFB CENTRAL HEADER #356   02014B50 (33639248)\n-D5DFF Created Zip Spec      14 (20) '2.0'\n-D5E00 Created OS            03 (3) 'Unix'\n-D5E01 Extract Zip Spec      14 (20) '2.0'\n-D5E02 Extract OS            00 (0) 'MS-DOS'\n-D5E03 General Purpose Flag  0800 (2048)\n+D6379 CENTRAL HEADER #356   02014B50 (33639248)\n+D637D Created Zip Spec      14 (20) '2.0'\n+D637E Created OS            03 (3) 'Unix'\n+D637F Extract Zip Spec      14 (20) '2.0'\n+D6380 Extract OS            00 (0) 'MS-DOS'\n+D6381 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5E05 Compression Method    0008 (8) 'Deflated'\n-D5E07 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5E0B CRC                   16A4BA93 (379894419)\n-D5E0F Compressed Size       000006D2 (1746)\n-D5E13 Uncompressed Size     000016E4 (5860)\n-D5E17 Filename Length       008D (141)\n-D5E19 Extra Length          0000 (0)\n-D5E1B Comment Length        0000 (0)\n-D5E1D Disk Start            0000 (0)\n-D5E1F Int File Attributes   0000 (0)\n+D6383 Compression Method    0008 (8) 'Deflated'\n+D6385 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6389 CRC                   16A4BA93 (379894419)\n+D638D Compressed Size       000006D2 (1746)\n+D6391 Uncompressed Size     000016E4 (5860)\n+D6395 Filename Length       008D (141)\n+D6397 Extra Length          0000 (0)\n+D6399 Comment Length        0000 (0)\n+D639B Disk Start            0000 (0)\n+D639D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5E21 Ext File Attributes   81A40000 (2175008768)\n+D639F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5E25 Local Header Offset   0003E98B (256395)\n-D5E29 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D63A3 Local Header Offset   0003E959 (256345)\n+D63A7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXX'\n #\n-# WARNING: Offset 0xD5E29: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD63A7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5EB6 CENTRAL HEADER #357   02014B50 (33639248)\n-D5EBA Created Zip Spec      14 (20) '2.0'\n-D5EBB Created OS            03 (3) 'Unix'\n-D5EBC Extract Zip Spec      14 (20) '2.0'\n-D5EBD Extract OS            00 (0) 'MS-DOS'\n-D5EBE General Purpose Flag  0800 (2048)\n+D6434 CENTRAL HEADER #357   02014B50 (33639248)\n+D6438 Created Zip Spec      14 (20) '2.0'\n+D6439 Created OS            03 (3) 'Unix'\n+D643A Extract Zip Spec      14 (20) '2.0'\n+D643B Extract OS            00 (0) 'MS-DOS'\n+D643C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5EC0 Compression Method    0008 (8) 'Deflated'\n-D5EC2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5EC6 CRC                   390AB403 (957002755)\n-D5ECA Compressed Size       000005D3 (1491)\n-D5ECE Uncompressed Size     00001068 (4200)\n-D5ED2 Filename Length       0090 (144)\n-D5ED4 Extra Length          0000 (0)\n-D5ED6 Comment Length        0000 (0)\n-D5ED8 Disk Start            0000 (0)\n-D5EDA Int File Attributes   0000 (0)\n+D643E Compression Method    0008 (8) 'Deflated'\n+D6440 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6444 CRC                   390AB403 (957002755)\n+D6448 Compressed Size       000005D3 (1491)\n+D644C Uncompressed Size     00001068 (4200)\n+D6450 Filename Length       0090 (144)\n+D6452 Extra Length          0000 (0)\n+D6454 Comment Length        0000 (0)\n+D6456 Disk Start            0000 (0)\n+D6458 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5EDC Ext File Attributes   81A40000 (2175008768)\n+D645A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5EE0 Local Header Offset   0003F108 (258312)\n-D5EE4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D645E Local Header Offset   0003F0D6 (258262)\n+D6462 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD5EE4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6462: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D5F74 CENTRAL HEADER #358   02014B50 (33639248)\n-D5F78 Created Zip Spec      14 (20) '2.0'\n-D5F79 Created OS            03 (3) 'Unix'\n-D5F7A Extract Zip Spec      14 (20) '2.0'\n-D5F7B Extract OS            00 (0) 'MS-DOS'\n-D5F7C General Purpose Flag  0800 (2048)\n+D64F2 CENTRAL HEADER #358   02014B50 (33639248)\n+D64F6 Created Zip Spec      14 (20) '2.0'\n+D64F7 Created OS            03 (3) 'Unix'\n+D64F8 Extract Zip Spec      14 (20) '2.0'\n+D64F9 Extract OS            00 (0) 'MS-DOS'\n+D64FA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D5F7E Compression Method    0008 (8) 'Deflated'\n-D5F80 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D5F84 CRC                   3DE98548 (1038714184)\n-D5F88 Compressed Size       0000064F (1615)\n-D5F8C Uncompressed Size     000016AA (5802)\n-D5F90 Filename Length       008C (140)\n-D5F92 Extra Length          0000 (0)\n-D5F94 Comment Length        0000 (0)\n-D5F96 Disk Start            0000 (0)\n-D5F98 Int File Attributes   0000 (0)\n+D64FC Compression Method    0008 (8) 'Deflated'\n+D64FE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6502 CRC                   3DE98548 (1038714184)\n+D6506 Compressed Size       0000064F (1615)\n+D650A Uncompressed Size     000016AA (5802)\n+D650E Filename Length       008C (140)\n+D6510 Extra Length          0000 (0)\n+D6512 Comment Length        0000 (0)\n+D6514 Disk Start            0000 (0)\n+D6516 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D5F9A Ext File Attributes   81A40000 (2175008768)\n+D6518 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D5F9E Local Header Offset   0003F789 (259977)\n-D5FA2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D651C Local Header Offset   0003F757 (259927)\n+D6520 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXX'\n #\n-# WARNING: Offset 0xD5FA2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6520: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D602E CENTRAL HEADER #359   02014B50 (33639248)\n-D6032 Created Zip Spec      14 (20) '2.0'\n-D6033 Created OS            03 (3) 'Unix'\n-D6034 Extract Zip Spec      14 (20) '2.0'\n-D6035 Extract OS            00 (0) 'MS-DOS'\n-D6036 General Purpose Flag  0800 (2048)\n+D65AC CENTRAL HEADER #359   02014B50 (33639248)\n+D65B0 Created Zip Spec      14 (20) '2.0'\n+D65B1 Created OS            03 (3) 'Unix'\n+D65B2 Extract Zip Spec      14 (20) '2.0'\n+D65B3 Extract OS            00 (0) 'MS-DOS'\n+D65B4 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6038 Compression Method    0008 (8) 'Deflated'\n-D603A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D603E CRC                   561A3BB2 (1444559794)\n-D6042 Compressed Size       000009BA (2490)\n-D6046 Uncompressed Size     000018A8 (6312)\n-D604A Filename Length       0071 (113)\n-D604C Extra Length          0000 (0)\n-D604E Comment Length        0000 (0)\n-D6050 Disk Start            0000 (0)\n-D6052 Int File Attributes   0000 (0)\n+D65B6 Compression Method    0008 (8) 'Deflated'\n+D65B8 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D65BC CRC                   561A3BB2 (1444559794)\n+D65C0 Compressed Size       000009BA (2490)\n+D65C4 Uncompressed Size     000018A8 (6312)\n+D65C8 Filename Length       0071 (113)\n+D65CA Extra Length          0000 (0)\n+D65CC Comment Length        0000 (0)\n+D65CE Disk Start            0000 (0)\n+D65D0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6054 Ext File Attributes   81A40000 (2175008768)\n+D65D2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6058 Local Header Offset   0003FE82 (261762)\n-D605C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D65D6 Local Header Offset   0003FE50 (261712)\n+D65DA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD605C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD65DA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D60CD CENTRAL HEADER #360   02014B50 (33639248)\n-D60D1 Created Zip Spec      14 (20) '2.0'\n-D60D2 Created OS            03 (3) 'Unix'\n-D60D3 Extract Zip Spec      14 (20) '2.0'\n-D60D4 Extract OS            00 (0) 'MS-DOS'\n-D60D5 General Purpose Flag  0800 (2048)\n+D664B CENTRAL HEADER #360   02014B50 (33639248)\n+D664F Created Zip Spec      14 (20) '2.0'\n+D6650 Created OS            03 (3) 'Unix'\n+D6651 Extract Zip Spec      14 (20) '2.0'\n+D6652 Extract OS            00 (0) 'MS-DOS'\n+D6653 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D60D7 Compression Method    0008 (8) 'Deflated'\n-D60D9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D60DD CRC                   A1D18B9C (2714864540)\n-D60E1 Compressed Size       00000A70 (2672)\n-D60E5 Uncompressed Size     00001AC2 (6850)\n-D60E9 Filename Length       0070 (112)\n-D60EB Extra Length          0000 (0)\n-D60ED Comment Length        0000 (0)\n-D60EF Disk Start            0000 (0)\n-D60F1 Int File Attributes   0000 (0)\n+D6655 Compression Method    0008 (8) 'Deflated'\n+D6657 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D665B CRC                   A1D18B9C (2714864540)\n+D665F Compressed Size       00000A70 (2672)\n+D6663 Uncompressed Size     00001AC2 (6850)\n+D6667 Filename Length       0070 (112)\n+D6669 Extra Length          0000 (0)\n+D666B Comment Length        0000 (0)\n+D666D Disk Start            0000 (0)\n+D666F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D60F3 Ext File Attributes   81A40000 (2175008768)\n+D6671 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D60F7 Local Header Offset   000408CB (264395)\n-D60FB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6675 Local Header Offset   00040899 (264345)\n+D6679 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD60FB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6679: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D616B CENTRAL HEADER #361   02014B50 (33639248)\n-D616F Created Zip Spec      14 (20) '2.0'\n-D6170 Created OS            03 (3) 'Unix'\n-D6171 Extract Zip Spec      14 (20) '2.0'\n-D6172 Extract OS            00 (0) 'MS-DOS'\n-D6173 General Purpose Flag  0800 (2048)\n+D66E9 CENTRAL HEADER #361   02014B50 (33639248)\n+D66ED Created Zip Spec      14 (20) '2.0'\n+D66EE Created OS            03 (3) 'Unix'\n+D66EF Extract Zip Spec      14 (20) '2.0'\n+D66F0 Extract OS            00 (0) 'MS-DOS'\n+D66F1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6175 Compression Method    0008 (8) 'Deflated'\n-D6177 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D617B CRC                   33231FD5 (857939925)\n-D617F Compressed Size       0000082D (2093)\n-D6183 Uncompressed Size     00001399 (5017)\n-D6187 Filename Length       0071 (113)\n-D6189 Extra Length          0000 (0)\n-D618B Comment Length        0000 (0)\n-D618D Disk Start            0000 (0)\n-D618F Int File Attributes   0000 (0)\n+D66F3 Compression Method    0008 (8) 'Deflated'\n+D66F5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D66F9 CRC                   33231FD5 (857939925)\n+D66FD Compressed Size       0000082D (2093)\n+D6701 Uncompressed Size     00001399 (5017)\n+D6705 Filename Length       0071 (113)\n+D6707 Extra Length          0000 (0)\n+D6709 Comment Length        0000 (0)\n+D670B Disk Start            0000 (0)\n+D670D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6191 Ext File Attributes   81A40000 (2175008768)\n+D670F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6195 Local Header Offset   000413C9 (267209)\n-D6199 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6713 Local Header Offset   00041397 (267159)\n+D6717 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6199: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6717: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D620A CENTRAL HEADER #362   02014B50 (33639248)\n-D620E Created Zip Spec      14 (20) '2.0'\n-D620F Created OS            03 (3) 'Unix'\n-D6210 Extract Zip Spec      14 (20) '2.0'\n-D6211 Extract OS            00 (0) 'MS-DOS'\n-D6212 General Purpose Flag  0800 (2048)\n+D6788 CENTRAL HEADER #362   02014B50 (33639248)\n+D678C Created Zip Spec      14 (20) '2.0'\n+D678D Created OS            03 (3) 'Unix'\n+D678E Extract Zip Spec      14 (20) '2.0'\n+D678F Extract OS            00 (0) 'MS-DOS'\n+D6790 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6214 Compression Method    0008 (8) 'Deflated'\n-D6216 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D621A CRC                   63C353AF (1673745327)\n-D621E Compressed Size       000005DA (1498)\n-D6222 Uncompressed Size     00000CF8 (3320)\n-D6226 Filename Length       006A (106)\n-D6228 Extra Length          0000 (0)\n-D622A Comment Length        0000 (0)\n-D622C Disk Start            0000 (0)\n-D622E Int File Attributes   0000 (0)\n+D6792 Compression Method    0008 (8) 'Deflated'\n+D6794 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6798 CRC                   63C353AF (1673745327)\n+D679C Compressed Size       000005DA (1498)\n+D67A0 Uncompressed Size     00000CF8 (3320)\n+D67A4 Filename Length       006A (106)\n+D67A6 Extra Length          0000 (0)\n+D67A8 Comment Length        0000 (0)\n+D67AA Disk Start            0000 (0)\n+D67AC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6230 Ext File Attributes   81A40000 (2175008768)\n+D67AE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6234 Local Header Offset   00041C85 (269445)\n-D6238 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D67B2 Local Header Offset   00041C53 (269395)\n+D67B6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6238: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD67B6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D62A2 CENTRAL HEADER #363   02014B50 (33639248)\n-D62A6 Created Zip Spec      14 (20) '2.0'\n-D62A7 Created OS            03 (3) 'Unix'\n-D62A8 Extract Zip Spec      14 (20) '2.0'\n-D62A9 Extract OS            00 (0) 'MS-DOS'\n-D62AA General Purpose Flag  0800 (2048)\n+D6820 CENTRAL HEADER #363   02014B50 (33639248)\n+D6824 Created Zip Spec      14 (20) '2.0'\n+D6825 Created OS            03 (3) 'Unix'\n+D6826 Extract Zip Spec      14 (20) '2.0'\n+D6827 Extract OS            00 (0) 'MS-DOS'\n+D6828 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D62AC Compression Method    0008 (8) 'Deflated'\n-D62AE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D62B2 CRC                   C64481A5 (3326378405)\n-D62B6 Compressed Size       000003AA (938)\n-D62BA Uncompressed Size     00000723 (1827)\n-D62BE Filename Length       0071 (113)\n-D62C0 Extra Length          0000 (0)\n-D62C2 Comment Length        0000 (0)\n-D62C4 Disk Start            0000 (0)\n-D62C6 Int File Attributes   0000 (0)\n+D682A Compression Method    0008 (8) 'Deflated'\n+D682C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6830 CRC                   C64481A5 (3326378405)\n+D6834 Compressed Size       000003AA (938)\n+D6838 Uncompressed Size     00000723 (1827)\n+D683C Filename Length       0071 (113)\n+D683E Extra Length          0000 (0)\n+D6840 Comment Length        0000 (0)\n+D6842 Disk Start            0000 (0)\n+D6844 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D62C8 Ext File Attributes   81A40000 (2175008768)\n+D6846 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D62CC Local Header Offset   000422E7 (271079)\n-D62D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D684A Local Header Offset   000422B5 (271029)\n+D684E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD62D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD684E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6341 CENTRAL HEADER #364   02014B50 (33639248)\n-D6345 Created Zip Spec      14 (20) '2.0'\n-D6346 Created OS            03 (3) 'Unix'\n-D6347 Extract Zip Spec      14 (20) '2.0'\n-D6348 Extract OS            00 (0) 'MS-DOS'\n-D6349 General Purpose Flag  0800 (2048)\n+D68BF CENTRAL HEADER #364   02014B50 (33639248)\n+D68C3 Created Zip Spec      14 (20) '2.0'\n+D68C4 Created OS            03 (3) 'Unix'\n+D68C5 Extract Zip Spec      14 (20) '2.0'\n+D68C6 Extract OS            00 (0) 'MS-DOS'\n+D68C7 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D634B Compression Method    0008 (8) 'Deflated'\n-D634D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6351 CRC                   39649106 (962892038)\n-D6355 Compressed Size       0000039E (926)\n-D6359 Uncompressed Size     000006E2 (1762)\n-D635D Filename Length       006F (111)\n-D635F Extra Length          0000 (0)\n-D6361 Comment Length        0000 (0)\n-D6363 Disk Start            0000 (0)\n-D6365 Int File Attributes   0000 (0)\n+D68C9 Compression Method    0008 (8) 'Deflated'\n+D68CB Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D68CF CRC                   39649106 (962892038)\n+D68D3 Compressed Size       0000039E (926)\n+D68D7 Uncompressed Size     000006E2 (1762)\n+D68DB Filename Length       006F (111)\n+D68DD Extra Length          0000 (0)\n+D68DF Comment Length        0000 (0)\n+D68E1 Disk Start            0000 (0)\n+D68E3 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6367 Ext File Attributes   81A40000 (2175008768)\n+D68E5 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D636B Local Header Offset   00042720 (272160)\n-D636F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D68E9 Local Header Offset   000426EE (272110)\n+D68ED Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD636F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD68ED: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D63DE CENTRAL HEADER #365   02014B50 (33639248)\n-D63E2 Created Zip Spec      14 (20) '2.0'\n-D63E3 Created OS            03 (3) 'Unix'\n-D63E4 Extract Zip Spec      14 (20) '2.0'\n-D63E5 Extract OS            00 (0) 'MS-DOS'\n-D63E6 General Purpose Flag  0800 (2048)\n+D695C CENTRAL HEADER #365   02014B50 (33639248)\n+D6960 Created Zip Spec      14 (20) '2.0'\n+D6961 Created OS            03 (3) 'Unix'\n+D6962 Extract Zip Spec      14 (20) '2.0'\n+D6963 Extract OS            00 (0) 'MS-DOS'\n+D6964 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D63E8 Compression Method    0008 (8) 'Deflated'\n-D63EA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D63EE CRC                   8DC8B44C (2378740812)\n-D63F2 Compressed Size       000003E3 (995)\n-D63F6 Uncompressed Size     00000782 (1922)\n-D63FA Filename Length       006A (106)\n-D63FC Extra Length          0000 (0)\n-D63FE Comment Length        0000 (0)\n-D6400 Disk Start            0000 (0)\n-D6402 Int File Attributes   0000 (0)\n+D6966 Compression Method    0008 (8) 'Deflated'\n+D6968 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D696C CRC                   8DC8B44C (2378740812)\n+D6970 Compressed Size       000003E3 (995)\n+D6974 Uncompressed Size     00000782 (1922)\n+D6978 Filename Length       006A (106)\n+D697A Extra Length          0000 (0)\n+D697C Comment Length        0000 (0)\n+D697E Disk Start            0000 (0)\n+D6980 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6404 Ext File Attributes   81A40000 (2175008768)\n+D6982 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6408 Local Header Offset   00042B4B (273227)\n-D640C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6986 Local Header Offset   00042B19 (273177)\n+D698A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD640C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD698A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6476 CENTRAL HEADER #366   02014B50 (33639248)\n-D647A Created Zip Spec      14 (20) '2.0'\n-D647B Created OS            03 (3) 'Unix'\n-D647C Extract Zip Spec      14 (20) '2.0'\n-D647D Extract OS            00 (0) 'MS-DOS'\n-D647E General Purpose Flag  0800 (2048)\n+D69F4 CENTRAL HEADER #366   02014B50 (33639248)\n+D69F8 Created Zip Spec      14 (20) '2.0'\n+D69F9 Created OS            03 (3) 'Unix'\n+D69FA Extract Zip Spec      14 (20) '2.0'\n+D69FB Extract OS            00 (0) 'MS-DOS'\n+D69FC General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6480 Compression Method    0008 (8) 'Deflated'\n-D6482 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6486 CRC                   335CA1CD (861708749)\n-D648A Compressed Size       0000068B (1675)\n-D648E Uncompressed Size     00000E9A (3738)\n-D6492 Filename Length       0074 (116)\n-D6494 Extra Length          0000 (0)\n-D6496 Comment Length        0000 (0)\n-D6498 Disk Start            0000 (0)\n-D649A Int File Attributes   0000 (0)\n+D69FE Compression Method    0008 (8) 'Deflated'\n+D6A00 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6A04 CRC                   335CA1CD (861708749)\n+D6A08 Compressed Size       0000068B (1675)\n+D6A0C Uncompressed Size     00000E9A (3738)\n+D6A10 Filename Length       0074 (116)\n+D6A12 Extra Length          0000 (0)\n+D6A14 Comment Length        0000 (0)\n+D6A16 Disk Start            0000 (0)\n+D6A18 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D649C Ext File Attributes   81A40000 (2175008768)\n+D6A1A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D64A0 Local Header Offset   00042FB6 (274358)\n-D64A4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6A1E Local Header Offset   00042F84 (274308)\n+D6A22 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD64A4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6A22: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6518 CENTRAL HEADER #367   02014B50 (33639248)\n-D651C Created Zip Spec      14 (20) '2.0'\n-D651D Created OS            03 (3) 'Unix'\n-D651E Extract Zip Spec      14 (20) '2.0'\n-D651F Extract OS            00 (0) 'MS-DOS'\n-D6520 General Purpose Flag  0800 (2048)\n+D6A96 CENTRAL HEADER #367   02014B50 (33639248)\n+D6A9A Created Zip Spec      14 (20) '2.0'\n+D6A9B Created OS            03 (3) 'Unix'\n+D6A9C Extract Zip Spec      14 (20) '2.0'\n+D6A9D Extract OS            00 (0) 'MS-DOS'\n+D6A9E General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6522 Compression Method    0008 (8) 'Deflated'\n-D6524 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6528 CRC                   3EE7FDDD (1055391197)\n-D652C Compressed Size       00000723 (1827)\n-D6530 Uncompressed Size     00001059 (4185)\n-D6534 Filename Length       0080 (128)\n-D6536 Extra Length          0000 (0)\n-D6538 Comment Length        0000 (0)\n-D653A Disk Start            0000 (0)\n-D653C Int File Attributes   0000 (0)\n+D6AA0 Compression Method    0008 (8) 'Deflated'\n+D6AA2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6AA6 CRC                   3EE7FDDD (1055391197)\n+D6AAA Compressed Size       00000723 (1827)\n+D6AAE Uncompressed Size     00001059 (4185)\n+D6AB2 Filename Length       0080 (128)\n+D6AB4 Extra Length          0000 (0)\n+D6AB6 Comment Length        0000 (0)\n+D6AB8 Disk Start            0000 (0)\n+D6ABA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D653E Ext File Attributes   81A40000 (2175008768)\n+D6ABC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6542 Local Header Offset   000436D3 (276179)\n-D6546 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6AC0 Local Header Offset   000436A1 (276129)\n+D6AC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6546: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6AC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D65C6 CENTRAL HEADER #368   02014B50 (33639248)\n-D65CA Created Zip Spec      14 (20) '2.0'\n-D65CB Created OS            03 (3) 'Unix'\n-D65CC Extract Zip Spec      14 (20) '2.0'\n-D65CD Extract OS            00 (0) 'MS-DOS'\n-D65CE General Purpose Flag  0800 (2048)\n+D6B44 CENTRAL HEADER #368   02014B50 (33639248)\n+D6B48 Created Zip Spec      14 (20) '2.0'\n+D6B49 Created OS            03 (3) 'Unix'\n+D6B4A Extract Zip Spec      14 (20) '2.0'\n+D6B4B Extract OS            00 (0) 'MS-DOS'\n+D6B4C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D65D0 Compression Method    0008 (8) 'Deflated'\n-D65D2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D65D6 CRC                   67FA3A91 (1744452241)\n-D65DA Compressed Size       000004A5 (1189)\n-D65DE Uncompressed Size     00000C5B (3163)\n-D65E2 Filename Length       007F (127)\n-D65E4 Extra Length          0000 (0)\n-D65E6 Comment Length        0000 (0)\n-D65E8 Disk Start            0000 (0)\n-D65EA Int File Attributes   0000 (0)\n+D6B4E Compression Method    0008 (8) 'Deflated'\n+D6B50 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6B54 CRC                   67FA3A91 (1744452241)\n+D6B58 Compressed Size       000004A5 (1189)\n+D6B5C Uncompressed Size     00000C5B (3163)\n+D6B60 Filename Length       007F (127)\n+D6B62 Extra Length          0000 (0)\n+D6B64 Comment Length        0000 (0)\n+D6B66 Disk Start            0000 (0)\n+D6B68 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D65EC Ext File Attributes   81A40000 (2175008768)\n+D6B6A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D65F0 Local Header Offset   00043E94 (278164)\n-D65F4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6B6E Local Header Offset   00043E62 (278114)\n+D6B72 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD65F4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6B72: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6673 CENTRAL HEADER #369   02014B50 (33639248)\n-D6677 Created Zip Spec      14 (20) '2.0'\n-D6678 Created OS            03 (3) 'Unix'\n-D6679 Extract Zip Spec      14 (20) '2.0'\n-D667A Extract OS            00 (0) 'MS-DOS'\n-D667B General Purpose Flag  0800 (2048)\n+D6BF1 CENTRAL HEADER #369   02014B50 (33639248)\n+D6BF5 Created Zip Spec      14 (20) '2.0'\n+D6BF6 Created OS            03 (3) 'Unix'\n+D6BF7 Extract Zip Spec      14 (20) '2.0'\n+D6BF8 Extract OS            00 (0) 'MS-DOS'\n+D6BF9 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D667D Compression Method    0008 (8) 'Deflated'\n-D667F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6683 CRC                   984F1B9C (2555321244)\n-D6687 Compressed Size       0000083C (2108)\n-D668B Uncompressed Size     00001AA4 (6820)\n-D668F Filename Length       007A (122)\n-D6691 Extra Length          0000 (0)\n-D6693 Comment Length        0000 (0)\n-D6695 Disk Start            0000 (0)\n-D6697 Int File Attributes   0000 (0)\n+D6BFB Compression Method    0008 (8) 'Deflated'\n+D6BFD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6C01 CRC                   984F1B9C (2555321244)\n+D6C05 Compressed Size       0000083C (2108)\n+D6C09 Uncompressed Size     00001AA4 (6820)\n+D6C0D Filename Length       007A (122)\n+D6C0F Extra Length          0000 (0)\n+D6C11 Comment Length        0000 (0)\n+D6C13 Disk Start            0000 (0)\n+D6C15 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6699 Ext File Attributes   81A40000 (2175008768)\n+D6C17 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D669D Local Header Offset   000443D6 (279510)\n-D66A1 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6C1B Local Header Offset   000443A4 (279460)\n+D6C1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD66A1: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6C1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D671B CENTRAL HEADER #370   02014B50 (33639248)\n-D671F Created Zip Spec      14 (20) '2.0'\n-D6720 Created OS            03 (3) 'Unix'\n-D6721 Extract Zip Spec      14 (20) '2.0'\n-D6722 Extract OS            00 (0) 'MS-DOS'\n-D6723 General Purpose Flag  0800 (2048)\n+D6C99 CENTRAL HEADER #370   02014B50 (33639248)\n+D6C9D Created Zip Spec      14 (20) '2.0'\n+D6C9E Created OS            03 (3) 'Unix'\n+D6C9F Extract Zip Spec      14 (20) '2.0'\n+D6CA0 Extract OS            00 (0) 'MS-DOS'\n+D6CA1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6725 Compression Method    0008 (8) 'Deflated'\n-D6727 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D672B CRC                   0FF19131 (267489585)\n-D672F Compressed Size       0000057D (1405)\n-D6733 Uncompressed Size     00000DC2 (3522)\n-D6737 Filename Length       0082 (130)\n-D6739 Extra Length          0000 (0)\n-D673B Comment Length        0000 (0)\n-D673D Disk Start            0000 (0)\n-D673F Int File Attributes   0000 (0)\n+D6CA3 Compression Method    0008 (8) 'Deflated'\n+D6CA5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6CA9 CRC                   0FF19131 (267489585)\n+D6CAD Compressed Size       0000057D (1405)\n+D6CB1 Uncompressed Size     00000DC2 (3522)\n+D6CB5 Filename Length       0082 (130)\n+D6CB7 Extra Length          0000 (0)\n+D6CB9 Comment Length        0000 (0)\n+D6CBB Disk Start            0000 (0)\n+D6CBD Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6741 Ext File Attributes   81A40000 (2175008768)\n+D6CBF Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6745 Local Header Offset   00044CAA (281770)\n-D6749 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6CC3 Local Header Offset   00044C78 (281720)\n+D6CC7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6749: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6CC7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D67CB CENTRAL HEADER #371   02014B50 (33639248)\n-D67CF Created Zip Spec      14 (20) '2.0'\n-D67D0 Created OS            03 (3) 'Unix'\n-D67D1 Extract Zip Spec      14 (20) '2.0'\n-D67D2 Extract OS            00 (0) 'MS-DOS'\n-D67D3 General Purpose Flag  0800 (2048)\n+D6D49 CENTRAL HEADER #371   02014B50 (33639248)\n+D6D4D Created Zip Spec      14 (20) '2.0'\n+D6D4E Created OS            03 (3) 'Unix'\n+D6D4F Extract Zip Spec      14 (20) '2.0'\n+D6D50 Extract OS            00 (0) 'MS-DOS'\n+D6D51 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D67D5 Compression Method    0008 (8) 'Deflated'\n-D67D7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D67DB CRC                   63513D5C (1666268508)\n-D67DF Compressed Size       000003E5 (997)\n-D67E3 Uncompressed Size     000007C0 (1984)\n-D67E7 Filename Length       007F (127)\n-D67E9 Extra Length          0000 (0)\n-D67EB Comment Length        0000 (0)\n-D67ED Disk Start            0000 (0)\n-D67EF Int File Attributes   0000 (0)\n+D6D53 Compression Method    0008 (8) 'Deflated'\n+D6D55 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6D59 CRC                   63513D5C (1666268508)\n+D6D5D Compressed Size       000003E5 (997)\n+D6D61 Uncompressed Size     000007C0 (1984)\n+D6D65 Filename Length       007F (127)\n+D6D67 Extra Length          0000 (0)\n+D6D69 Comment Length        0000 (0)\n+D6D6B Disk Start            0000 (0)\n+D6D6D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D67F1 Ext File Attributes   81A40000 (2175008768)\n+D6D6F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D67F5 Local Header Offset   000452C7 (283335)\n-D67F9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6D73 Local Header Offset   00045295 (283285)\n+D6D77 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD67F9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6D77: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6878 CENTRAL HEADER #372   02014B50 (33639248)\n-D687C Created Zip Spec      14 (20) '2.0'\n-D687D Created OS            03 (3) 'Unix'\n-D687E Extract Zip Spec      14 (20) '2.0'\n-D687F Extract OS            00 (0) 'MS-DOS'\n-D6880 General Purpose Flag  0800 (2048)\n+D6DF6 CENTRAL HEADER #372   02014B50 (33639248)\n+D6DFA Created Zip Spec      14 (20) '2.0'\n+D6DFB Created OS            03 (3) 'Unix'\n+D6DFC Extract Zip Spec      14 (20) '2.0'\n+D6DFD Extract OS            00 (0) 'MS-DOS'\n+D6DFE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6882 Compression Method    0008 (8) 'Deflated'\n-D6884 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6888 CRC                   99929518 (2576520472)\n-D688C Compressed Size       00000586 (1414)\n-D6890 Uncompressed Size     00000EDA (3802)\n-D6894 Filename Length       0076 (118)\n-D6896 Extra Length          0000 (0)\n-D6898 Comment Length        0000 (0)\n-D689A Disk Start            0000 (0)\n-D689C Int File Attributes   0000 (0)\n+D6E00 Compression Method    0008 (8) 'Deflated'\n+D6E02 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6E06 CRC                   99929518 (2576520472)\n+D6E0A Compressed Size       00000586 (1414)\n+D6E0E Uncompressed Size     00000EDA (3802)\n+D6E12 Filename Length       0076 (118)\n+D6E14 Extra Length          0000 (0)\n+D6E16 Comment Length        0000 (0)\n+D6E18 Disk Start            0000 (0)\n+D6E1A Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D689E Ext File Attributes   81A40000 (2175008768)\n+D6E1C Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D68A2 Local Header Offset   00045749 (284489)\n-D68A6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6E20 Local Header Offset   00045717 (284439)\n+D6E24 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD68A6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6E24: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D691C CENTRAL HEADER #373   02014B50 (33639248)\n-D6920 Created Zip Spec      14 (20) '2.0'\n-D6921 Created OS            03 (3) 'Unix'\n-D6922 Extract Zip Spec      14 (20) '2.0'\n-D6923 Extract OS            00 (0) 'MS-DOS'\n-D6924 General Purpose Flag  0800 (2048)\n+D6E9A CENTRAL HEADER #373   02014B50 (33639248)\n+D6E9E Created Zip Spec      14 (20) '2.0'\n+D6E9F Created OS            03 (3) 'Unix'\n+D6EA0 Extract Zip Spec      14 (20) '2.0'\n+D6EA1 Extract OS            00 (0) 'MS-DOS'\n+D6EA2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6926 Compression Method    0008 (8) 'Deflated'\n-D6928 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D692C CRC                   E6BF62E0 (3871302368)\n-D6930 Compressed Size       000003A3 (931)\n-D6934 Uncompressed Size     000008F8 (2296)\n-D6938 Filename Length       0074 (116)\n-D693A Extra Length          0000 (0)\n-D693C Comment Length        0000 (0)\n-D693E Disk Start            0000 (0)\n-D6940 Int File Attributes   0000 (0)\n+D6EA4 Compression Method    0008 (8) 'Deflated'\n+D6EA6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6EAA CRC                   E6BF62E0 (3871302368)\n+D6EAE Compressed Size       000003A3 (931)\n+D6EB2 Uncompressed Size     000008F8 (2296)\n+D6EB6 Filename Length       0074 (116)\n+D6EB8 Extra Length          0000 (0)\n+D6EBA Comment Length        0000 (0)\n+D6EBC Disk Start            0000 (0)\n+D6EBE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6942 Ext File Attributes   81A40000 (2175008768)\n+D6EC0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6946 Local Header Offset   00045D63 (286051)\n-D694A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6EC4 Local Header Offset   00045D31 (286001)\n+D6EC8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD694A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6EC8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D69BE CENTRAL HEADER #374   02014B50 (33639248)\n-D69C2 Created Zip Spec      14 (20) '2.0'\n-D69C3 Created OS            03 (3) 'Unix'\n-D69C4 Extract Zip Spec      14 (20) '2.0'\n-D69C5 Extract OS            00 (0) 'MS-DOS'\n-D69C6 General Purpose Flag  0800 (2048)\n+D6F3C CENTRAL HEADER #374   02014B50 (33639248)\n+D6F40 Created Zip Spec      14 (20) '2.0'\n+D6F41 Created OS            03 (3) 'Unix'\n+D6F42 Extract Zip Spec      14 (20) '2.0'\n+D6F43 Extract OS            00 (0) 'MS-DOS'\n+D6F44 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D69C8 Compression Method    0008 (8) 'Deflated'\n-D69CA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D69CE CRC                   F05E2331 (4032701233)\n-D69D2 Compressed Size       00000408 (1032)\n-D69D6 Uncompressed Size     00000831 (2097)\n-D69DA Filename Length       007B (123)\n-D69DC Extra Length          0000 (0)\n-D69DE Comment Length        0000 (0)\n-D69E0 Disk Start            0000 (0)\n-D69E2 Int File Attributes   0000 (0)\n+D6F46 Compression Method    0008 (8) 'Deflated'\n+D6F48 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6F4C CRC                   F05E2331 (4032701233)\n+D6F50 Compressed Size       00000408 (1032)\n+D6F54 Uncompressed Size     00000831 (2097)\n+D6F58 Filename Length       007B (123)\n+D6F5A Extra Length          0000 (0)\n+D6F5C Comment Length        0000 (0)\n+D6F5E Disk Start            0000 (0)\n+D6F60 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D69E4 Ext File Attributes   81A40000 (2175008768)\n+D6F62 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D69E8 Local Header Offset   00046198 (287128)\n-D69EC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D6F66 Local Header Offset   00046166 (287078)\n+D6F6A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD69EC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD6F6A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6A67 CENTRAL HEADER #375   02014B50 (33639248)\n-D6A6B Created Zip Spec      14 (20) '2.0'\n-D6A6C Created OS            03 (3) 'Unix'\n-D6A6D Extract Zip Spec      14 (20) '2.0'\n-D6A6E Extract OS            00 (0) 'MS-DOS'\n-D6A6F General Purpose Flag  0800 (2048)\n+D6FE5 CENTRAL HEADER #375   02014B50 (33639248)\n+D6FE9 Created Zip Spec      14 (20) '2.0'\n+D6FEA Created OS            03 (3) 'Unix'\n+D6FEB Extract Zip Spec      14 (20) '2.0'\n+D6FEC Extract OS            00 (0) 'MS-DOS'\n+D6FED General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6A71 Compression Method    0008 (8) 'Deflated'\n-D6A73 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6A77 CRC                   80ED3BA4 (2163030948)\n-D6A7B Compressed Size       0000055C (1372)\n-D6A7F Uncompressed Size     000015D0 (5584)\n-D6A83 Filename Length       0079 (121)\n-D6A85 Extra Length          0000 (0)\n-D6A87 Comment Length        0000 (0)\n-D6A89 Disk Start            0000 (0)\n-D6A8B Int File Attributes   0000 (0)\n+D6FEF Compression Method    0008 (8) 'Deflated'\n+D6FF1 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D6FF5 CRC                   80ED3BA4 (2163030948)\n+D6FF9 Compressed Size       0000055C (1372)\n+D6FFD Uncompressed Size     000015D0 (5584)\n+D7001 Filename Length       0079 (121)\n+D7003 Extra Length          0000 (0)\n+D7005 Comment Length        0000 (0)\n+D7007 Disk Start            0000 (0)\n+D7009 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6A8D Ext File Attributes   81A40000 (2175008768)\n+D700B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6A91 Local Header Offset   00046639 (288313)\n-D6A95 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D700F Local Header Offset   00046607 (288263)\n+D7013 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6A95: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7013: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6B0E CENTRAL HEADER #376   02014B50 (33639248)\n-D6B12 Created Zip Spec      14 (20) '2.0'\n-D6B13 Created OS            03 (3) 'Unix'\n-D6B14 Extract Zip Spec      14 (20) '2.0'\n-D6B15 Extract OS            00 (0) 'MS-DOS'\n-D6B16 General Purpose Flag  0800 (2048)\n+D708C CENTRAL HEADER #376   02014B50 (33639248)\n+D7090 Created Zip Spec      14 (20) '2.0'\n+D7091 Created OS            03 (3) 'Unix'\n+D7092 Extract Zip Spec      14 (20) '2.0'\n+D7093 Extract OS            00 (0) 'MS-DOS'\n+D7094 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6B18 Compression Method    0008 (8) 'Deflated'\n-D6B1A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6B1E CRC                   7018E446 (1880679494)\n-D6B22 Compressed Size       000009A0 (2464)\n-D6B26 Uncompressed Size     00001FAE (8110)\n-D6B2A Filename Length       007F (127)\n-D6B2C Extra Length          0000 (0)\n-D6B2E Comment Length        0000 (0)\n-D6B30 Disk Start            0000 (0)\n-D6B32 Int File Attributes   0000 (0)\n+D7096 Compression Method    0008 (8) 'Deflated'\n+D7098 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D709C CRC                   7018E446 (1880679494)\n+D70A0 Compressed Size       000009A0 (2464)\n+D70A4 Uncompressed Size     00001FAE (8110)\n+D70A8 Filename Length       007F (127)\n+D70AA Extra Length          0000 (0)\n+D70AC Comment Length        0000 (0)\n+D70AE Disk Start            0000 (0)\n+D70B0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6B34 Ext File Attributes   81A40000 (2175008768)\n+D70B2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6B38 Local Header Offset   00046C2C (289836)\n-D6B3C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D70B6 Local Header Offset   00046BFA (289786)\n+D70BA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6B3C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD70BA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6BBB CENTRAL HEADER #377   02014B50 (33639248)\n-D6BBF Created Zip Spec      14 (20) '2.0'\n-D6BC0 Created OS            03 (3) 'Unix'\n-D6BC1 Extract Zip Spec      14 (20) '2.0'\n-D6BC2 Extract OS            00 (0) 'MS-DOS'\n-D6BC3 General Purpose Flag  0800 (2048)\n+D7139 CENTRAL HEADER #377   02014B50 (33639248)\n+D713D Created Zip Spec      14 (20) '2.0'\n+D713E Created OS            03 (3) 'Unix'\n+D713F Extract Zip Spec      14 (20) '2.0'\n+D7140 Extract OS            00 (0) 'MS-DOS'\n+D7141 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6BC5 Compression Method    0008 (8) 'Deflated'\n-D6BC7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6BCB CRC                   61A0CE5A (1637928538)\n-D6BCF Compressed Size       0000049F (1183)\n-D6BD3 Uncompressed Size     000012FA (4858)\n-D6BD7 Filename Length       0076 (118)\n-D6BD9 Extra Length          0000 (0)\n-D6BDB Comment Length        0000 (0)\n-D6BDD Disk Start            0000 (0)\n-D6BDF Int File Attributes   0000 (0)\n+D7143 Compression Method    0008 (8) 'Deflated'\n+D7145 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7149 CRC                   61A0CE5A (1637928538)\n+D714D Compressed Size       0000049F (1183)\n+D7151 Uncompressed Size     000012FA (4858)\n+D7155 Filename Length       0076 (118)\n+D7157 Extra Length          0000 (0)\n+D7159 Comment Length        0000 (0)\n+D715B Disk Start            0000 (0)\n+D715D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6BE1 Ext File Attributes   81A40000 (2175008768)\n+D715F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6BE5 Local Header Offset   00047669 (292457)\n-D6BE9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7163 Local Header Offset   00047637 (292407)\n+D7167 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6BE9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7167: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6C5F CENTRAL HEADER #378   02014B50 (33639248)\n-D6C63 Created Zip Spec      14 (20) '2.0'\n-D6C64 Created OS            03 (3) 'Unix'\n-D6C65 Extract Zip Spec      14 (20) '2.0'\n-D6C66 Extract OS            00 (0) 'MS-DOS'\n-D6C67 General Purpose Flag  0800 (2048)\n+D71DD CENTRAL HEADER #378   02014B50 (33639248)\n+D71E1 Created Zip Spec      14 (20) '2.0'\n+D71E2 Created OS            03 (3) 'Unix'\n+D71E3 Extract Zip Spec      14 (20) '2.0'\n+D71E4 Extract OS            00 (0) 'MS-DOS'\n+D71E5 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6C69 Compression Method    0008 (8) 'Deflated'\n-D6C6B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6C6F CRC                   5A804AEF (1518357231)\n-D6C73 Compressed Size       00000762 (1890)\n-D6C77 Uncompressed Size     00001311 (4881)\n-D6C7B Filename Length       0079 (121)\n-D6C7D Extra Length          0000 (0)\n-D6C7F Comment Length        0000 (0)\n-D6C81 Disk Start            0000 (0)\n-D6C83 Int File Attributes   0000 (0)\n+D71E7 Compression Method    0008 (8) 'Deflated'\n+D71E9 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D71ED CRC                   5A804AEF (1518357231)\n+D71F1 Compressed Size       00000762 (1890)\n+D71F5 Uncompressed Size     00001311 (4881)\n+D71F9 Filename Length       0079 (121)\n+D71FB Extra Length          0000 (0)\n+D71FD Comment Length        0000 (0)\n+D71FF Disk Start            0000 (0)\n+D7201 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6C85 Ext File Attributes   81A40000 (2175008768)\n+D7203 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6C89 Local Header Offset   00047B9C (293788)\n-D6C8D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7207 Local Header Offset   00047B6A (293738)\n+D720B Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6C8D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD720B: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6D06 CENTRAL HEADER #379   02014B50 (33639248)\n-D6D0A Created Zip Spec      14 (20) '2.0'\n-D6D0B Created OS            03 (3) 'Unix'\n-D6D0C Extract Zip Spec      14 (20) '2.0'\n-D6D0D Extract OS            00 (0) 'MS-DOS'\n-D6D0E General Purpose Flag  0800 (2048)\n+D7284 CENTRAL HEADER #379   02014B50 (33639248)\n+D7288 Created Zip Spec      14 (20) '2.0'\n+D7289 Created OS            03 (3) 'Unix'\n+D728A Extract Zip Spec      14 (20) '2.0'\n+D728B Extract OS            00 (0) 'MS-DOS'\n+D728C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6D10 Compression Method    0008 (8) 'Deflated'\n-D6D12 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6D16 CRC                   F4A07CA3 (4104158371)\n-D6D1A Compressed Size       00000978 (2424)\n-D6D1E Uncompressed Size     000027E4 (10212)\n-D6D22 Filename Length       0075 (117)\n-D6D24 Extra Length          0000 (0)\n-D6D26 Comment Length        0000 (0)\n-D6D28 Disk Start            0000 (0)\n-D6D2A Int File Attributes   0000 (0)\n+D728E Compression Method    0008 (8) 'Deflated'\n+D7290 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7294 CRC                   F4A07CA3 (4104158371)\n+D7298 Compressed Size       00000978 (2424)\n+D729C Uncompressed Size     000027E4 (10212)\n+D72A0 Filename Length       0075 (117)\n+D72A2 Extra Length          0000 (0)\n+D72A4 Comment Length        0000 (0)\n+D72A6 Disk Start            0000 (0)\n+D72A8 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6D2C Ext File Attributes   81A40000 (2175008768)\n+D72AA Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6D30 Local Header Offset   00048395 (295829)\n-D6D34 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D72AE Local Header Offset   00048363 (295779)\n+D72B2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6D34: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD72B2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6DA9 CENTRAL HEADER #380   02014B50 (33639248)\n-D6DAD Created Zip Spec      14 (20) '2.0'\n-D6DAE Created OS            03 (3) 'Unix'\n-D6DAF Extract Zip Spec      14 (20) '2.0'\n-D6DB0 Extract OS            00 (0) 'MS-DOS'\n-D6DB1 General Purpose Flag  0800 (2048)\n+D7327 CENTRAL HEADER #380   02014B50 (33639248)\n+D732B Created Zip Spec      14 (20) '2.0'\n+D732C Created OS            03 (3) 'Unix'\n+D732D Extract Zip Spec      14 (20) '2.0'\n+D732E Extract OS            00 (0) 'MS-DOS'\n+D732F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6DB3 Compression Method    0008 (8) 'Deflated'\n-D6DB5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6DB9 CRC                   6E031E40 (1845698112)\n-D6DBD Compressed Size       0000075F (1887)\n-D6DC1 Uncompressed Size     00001276 (4726)\n-D6DC5 Filename Length       007D (125)\n-D6DC7 Extra Length          0000 (0)\n-D6DC9 Comment Length        0000 (0)\n-D6DCB Disk Start            0000 (0)\n-D6DCD Int File Attributes   0000 (0)\n+D7331 Compression Method    0008 (8) 'Deflated'\n+D7333 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7337 CRC                   6E031E40 (1845698112)\n+D733B Compressed Size       0000075F (1887)\n+D733F Uncompressed Size     00001276 (4726)\n+D7343 Filename Length       007D (125)\n+D7345 Extra Length          0000 (0)\n+D7347 Comment Length        0000 (0)\n+D7349 Disk Start            0000 (0)\n+D734B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6DCF Ext File Attributes   81A40000 (2175008768)\n+D734D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6DD3 Local Header Offset   00048DA0 (298400)\n-D6DD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7351 Local Header Offset   00048D6E (298350)\n+D7355 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6DD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7355: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6E54 CENTRAL HEADER #381   02014B50 (33639248)\n-D6E58 Created Zip Spec      14 (20) '2.0'\n-D6E59 Created OS            03 (3) 'Unix'\n-D6E5A Extract Zip Spec      14 (20) '2.0'\n-D6E5B Extract OS            00 (0) 'MS-DOS'\n-D6E5C General Purpose Flag  0800 (2048)\n+D73D2 CENTRAL HEADER #381   02014B50 (33639248)\n+D73D6 Created Zip Spec      14 (20) '2.0'\n+D73D7 Created OS            03 (3) 'Unix'\n+D73D8 Extract Zip Spec      14 (20) '2.0'\n+D73D9 Extract OS            00 (0) 'MS-DOS'\n+D73DA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6E5E Compression Method    0008 (8) 'Deflated'\n-D6E60 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6E64 CRC                   5987930A (1502057226)\n-D6E68 Compressed Size       00000501 (1281)\n-D6E6C Uncompressed Size     00000BDE (3038)\n-D6E70 Filename Length       007C (124)\n-D6E72 Extra Length          0000 (0)\n-D6E74 Comment Length        0000 (0)\n-D6E76 Disk Start            0000 (0)\n-D6E78 Int File Attributes   0000 (0)\n+D73DC Compression Method    0008 (8) 'Deflated'\n+D73DE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D73E2 CRC                   5987930A (1502057226)\n+D73E6 Compressed Size       00000501 (1281)\n+D73EA Uncompressed Size     00000BDE (3038)\n+D73EE Filename Length       007C (124)\n+D73F0 Extra Length          0000 (0)\n+D73F2 Comment Length        0000 (0)\n+D73F4 Disk Start            0000 (0)\n+D73F6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6E7A Ext File Attributes   81A40000 (2175008768)\n+D73F8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6E7E Local Header Offset   0004959A (300442)\n-D6E82 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D73FC Local Header Offset   00049568 (300392)\n+D7400 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6E82: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7400: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6EFE CENTRAL HEADER #382   02014B50 (33639248)\n-D6F02 Created Zip Spec      14 (20) '2.0'\n-D6F03 Created OS            03 (3) 'Unix'\n-D6F04 Extract Zip Spec      14 (20) '2.0'\n-D6F05 Extract OS            00 (0) 'MS-DOS'\n-D6F06 General Purpose Flag  0800 (2048)\n+D747C CENTRAL HEADER #382   02014B50 (33639248)\n+D7480 Created Zip Spec      14 (20) '2.0'\n+D7481 Created OS            03 (3) 'Unix'\n+D7482 Extract Zip Spec      14 (20) '2.0'\n+D7483 Extract OS            00 (0) 'MS-DOS'\n+D7484 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6F08 Compression Method    0008 (8) 'Deflated'\n-D6F0A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6F0E CRC                   CA93F7B9 (3398694841)\n-D6F12 Compressed Size       000003F5 (1013)\n-D6F16 Uncompressed Size     000008CF (2255)\n-D6F1A Filename Length       007D (125)\n-D6F1C Extra Length          0000 (0)\n-D6F1E Comment Length        0000 (0)\n-D6F20 Disk Start            0000 (0)\n-D6F22 Int File Attributes   0000 (0)\n+D7486 Compression Method    0008 (8) 'Deflated'\n+D7488 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D748C CRC                   CA93F7B9 (3398694841)\n+D7490 Compressed Size       000003F5 (1013)\n+D7494 Uncompressed Size     000008CF (2255)\n+D7498 Filename Length       007D (125)\n+D749A Extra Length          0000 (0)\n+D749C Comment Length        0000 (0)\n+D749E Disk Start            0000 (0)\n+D74A0 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6F24 Ext File Attributes   81A40000 (2175008768)\n+D74A2 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6F28 Local Header Offset   00049B35 (301877)\n-D6F2C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D74A6 Local Header Offset   00049B03 (301827)\n+D74AA Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6F2C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD74AA: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D6FA9 CENTRAL HEADER #383   02014B50 (33639248)\n-D6FAD Created Zip Spec      14 (20) '2.0'\n-D6FAE Created OS            03 (3) 'Unix'\n-D6FAF Extract Zip Spec      14 (20) '2.0'\n-D6FB0 Extract OS            00 (0) 'MS-DOS'\n-D6FB1 General Purpose Flag  0800 (2048)\n+D7527 CENTRAL HEADER #383   02014B50 (33639248)\n+D752B Created Zip Spec      14 (20) '2.0'\n+D752C Created OS            03 (3) 'Unix'\n+D752D Extract Zip Spec      14 (20) '2.0'\n+D752E Extract OS            00 (0) 'MS-DOS'\n+D752F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D6FB3 Compression Method    0008 (8) 'Deflated'\n-D6FB5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D6FB9 CRC                   673E5975 (1732139381)\n-D6FBD Compressed Size       00000507 (1287)\n-D6FC1 Uncompressed Size     00000CA9 (3241)\n-D6FC5 Filename Length       007B (123)\n-D6FC7 Extra Length          0000 (0)\n-D6FC9 Comment Length        0000 (0)\n-D6FCB Disk Start            0000 (0)\n-D6FCD Int File Attributes   0000 (0)\n+D7531 Compression Method    0008 (8) 'Deflated'\n+D7533 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7537 CRC                   673E5975 (1732139381)\n+D753B Compressed Size       00000507 (1287)\n+D753F Uncompressed Size     00000CA9 (3241)\n+D7543 Filename Length       007B (123)\n+D7545 Extra Length          0000 (0)\n+D7547 Comment Length        0000 (0)\n+D7549 Disk Start            0000 (0)\n+D754B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D6FCF Ext File Attributes   81A40000 (2175008768)\n+D754D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D6FD3 Local Header Offset   00049FC5 (303045)\n-D6FD7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7551 Local Header Offset   00049F93 (302995)\n+D7555 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD6FD7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7555: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7052 CENTRAL HEADER #384   02014B50 (33639248)\n-D7056 Created Zip Spec      14 (20) '2.0'\n-D7057 Created OS            03 (3) 'Unix'\n-D7058 Extract Zip Spec      14 (20) '2.0'\n-D7059 Extract OS            00 (0) 'MS-DOS'\n-D705A General Purpose Flag  0800 (2048)\n+D75D0 CENTRAL HEADER #384   02014B50 (33639248)\n+D75D4 Created Zip Spec      14 (20) '2.0'\n+D75D5 Created OS            03 (3) 'Unix'\n+D75D6 Extract Zip Spec      14 (20) '2.0'\n+D75D7 Extract OS            00 (0) 'MS-DOS'\n+D75D8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D705C Compression Method    0008 (8) 'Deflated'\n-D705E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7062 CRC                   2D1E752C (756970796)\n-D7066 Compressed Size       0000177A (6010)\n-D706A Uncompressed Size     00005038 (20536)\n-D706E Filename Length       0079 (121)\n-D7070 Extra Length          0000 (0)\n-D7072 Comment Length        0000 (0)\n-D7074 Disk Start            0000 (0)\n-D7076 Int File Attributes   0000 (0)\n+D75DA Compression Method    0008 (8) 'Deflated'\n+D75DC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D75E0 CRC                   2D1E752C (756970796)\n+D75E4 Compressed Size       0000177A (6010)\n+D75E8 Uncompressed Size     00005038 (20536)\n+D75EC Filename Length       0079 (121)\n+D75EE Extra Length          0000 (0)\n+D75F0 Comment Length        0000 (0)\n+D75F2 Disk Start            0000 (0)\n+D75F4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7078 Ext File Attributes   81A40000 (2175008768)\n+D75F6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D707C Local Header Offset   0004A565 (304485)\n-D7080 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D75FA Local Header Offset   0004A533 (304435)\n+D75FE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7080: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD75FE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D70F9 CENTRAL HEADER #385   02014B50 (33639248)\n-D70FD Created Zip Spec      14 (20) '2.0'\n-D70FE Created OS            03 (3) 'Unix'\n-D70FF Extract Zip Spec      14 (20) '2.0'\n-D7100 Extract OS            00 (0) 'MS-DOS'\n-D7101 General Purpose Flag  0800 (2048)\n+D7677 CENTRAL HEADER #385   02014B50 (33639248)\n+D767B Created Zip Spec      14 (20) '2.0'\n+D767C Created OS            03 (3) 'Unix'\n+D767D Extract Zip Spec      14 (20) '2.0'\n+D767E Extract OS            00 (0) 'MS-DOS'\n+D767F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7103 Compression Method    0008 (8) 'Deflated'\n-D7105 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7109 CRC                   DB187B38 (3675814712)\n-D710D Compressed Size       00000A58 (2648)\n-D7111 Uncompressed Size     00001A85 (6789)\n-D7115 Filename Length       0072 (114)\n-D7117 Extra Length          0000 (0)\n-D7119 Comment Length        0000 (0)\n-D711B Disk Start            0000 (0)\n-D711D Int File Attributes   0000 (0)\n+D7681 Compression Method    0008 (8) 'Deflated'\n+D7683 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7687 CRC                   DB187B38 (3675814712)\n+D768B Compressed Size       00000A58 (2648)\n+D768F Uncompressed Size     00001A85 (6789)\n+D7693 Filename Length       0072 (114)\n+D7695 Extra Length          0000 (0)\n+D7697 Comment Length        0000 (0)\n+D7699 Disk Start            0000 (0)\n+D769B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D711F Ext File Attributes   81A40000 (2175008768)\n+D769D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7123 Local Header Offset   0004BD76 (310646)\n-D7127 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D76A1 Local Header Offset   0004BD44 (310596)\n+D76A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7127: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD76A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7199 CENTRAL HEADER #386   02014B50 (33639248)\n-D719D Created Zip Spec      14 (20) '2.0'\n-D719E Created OS            03 (3) 'Unix'\n-D719F Extract Zip Spec      14 (20) '2.0'\n-D71A0 Extract OS            00 (0) 'MS-DOS'\n-D71A1 General Purpose Flag  0800 (2048)\n+D7717 CENTRAL HEADER #386   02014B50 (33639248)\n+D771B Created Zip Spec      14 (20) '2.0'\n+D771C Created OS            03 (3) 'Unix'\n+D771D Extract Zip Spec      14 (20) '2.0'\n+D771E Extract OS            00 (0) 'MS-DOS'\n+D771F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D71A3 Compression Method    0008 (8) 'Deflated'\n-D71A5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D71A9 CRC                   CD183667 (3440916071)\n-D71AD Compressed Size       00000A45 (2629)\n-D71B1 Uncompressed Size     00001A6E (6766)\n-D71B5 Filename Length       0073 (115)\n-D71B7 Extra Length          0000 (0)\n-D71B9 Comment Length        0000 (0)\n-D71BB Disk Start            0000 (0)\n-D71BD Int File Attributes   0000 (0)\n+D7721 Compression Method    0008 (8) 'Deflated'\n+D7723 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7727 CRC                   CD183667 (3440916071)\n+D772B Compressed Size       00000A45 (2629)\n+D772F Uncompressed Size     00001A6E (6766)\n+D7733 Filename Length       0073 (115)\n+D7735 Extra Length          0000 (0)\n+D7737 Comment Length        0000 (0)\n+D7739 Disk Start            0000 (0)\n+D773B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D71BF Ext File Attributes   81A40000 (2175008768)\n+D773D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D71C3 Local Header Offset   0004C85E (313438)\n-D71C7 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7741 Local Header Offset   0004C82C (313388)\n+D7745 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD71C7: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7745: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D723A CENTRAL HEADER #387   02014B50 (33639248)\n-D723E Created Zip Spec      14 (20) '2.0'\n-D723F Created OS            03 (3) 'Unix'\n-D7240 Extract Zip Spec      14 (20) '2.0'\n-D7241 Extract OS            00 (0) 'MS-DOS'\n-D7242 General Purpose Flag  0800 (2048)\n+D77B8 CENTRAL HEADER #387   02014B50 (33639248)\n+D77BC Created Zip Spec      14 (20) '2.0'\n+D77BD Created OS            03 (3) 'Unix'\n+D77BE Extract Zip Spec      14 (20) '2.0'\n+D77BF Extract OS            00 (0) 'MS-DOS'\n+D77C0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7244 Compression Method    0008 (8) 'Deflated'\n-D7246 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D724A CRC                   0C7DD276 (209572470)\n-D724E Compressed Size       00000A5A (2650)\n-D7252 Uncompressed Size     00001A92 (6802)\n-D7256 Filename Length       0073 (115)\n-D7258 Extra Length          0000 (0)\n-D725A Comment Length        0000 (0)\n-D725C Disk Start            0000 (0)\n-D725E Int File Attributes   0000 (0)\n+D77C2 Compression Method    0008 (8) 'Deflated'\n+D77C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D77C8 CRC                   0C7DD276 (209572470)\n+D77CC Compressed Size       00000A5A (2650)\n+D77D0 Uncompressed Size     00001A92 (6802)\n+D77D4 Filename Length       0073 (115)\n+D77D6 Extra Length          0000 (0)\n+D77D8 Comment Length        0000 (0)\n+D77DA Disk Start            0000 (0)\n+D77DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7260 Ext File Attributes   81A40000 (2175008768)\n+D77DE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7264 Local Header Offset   0004D334 (316212)\n-D7268 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D77E2 Local Header Offset   0004D302 (316162)\n+D77E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7268: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD77E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D72DB CENTRAL HEADER #388   02014B50 (33639248)\n-D72DF Created Zip Spec      14 (20) '2.0'\n-D72E0 Created OS            03 (3) 'Unix'\n-D72E1 Extract Zip Spec      14 (20) '2.0'\n-D72E2 Extract OS            00 (0) 'MS-DOS'\n-D72E3 General Purpose Flag  0800 (2048)\n+D7859 CENTRAL HEADER #388   02014B50 (33639248)\n+D785D Created Zip Spec      14 (20) '2.0'\n+D785E Created OS            03 (3) 'Unix'\n+D785F Extract Zip Spec      14 (20) '2.0'\n+D7860 Extract OS            00 (0) 'MS-DOS'\n+D7861 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D72E5 Compression Method    0008 (8) 'Deflated'\n-D72E7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D72EB CRC                   60EA12C2 (1625952962)\n-D72EF Compressed Size       000008AB (2219)\n-D72F3 Uncompressed Size     00001733 (5939)\n-D72F7 Filename Length       0074 (116)\n-D72F9 Extra Length          0000 (0)\n-D72FB Comment Length        0000 (0)\n-D72FD Disk Start            0000 (0)\n-D72FF Int File Attributes   0000 (0)\n+D7863 Compression Method    0008 (8) 'Deflated'\n+D7865 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7869 CRC                   60EA12C2 (1625952962)\n+D786D Compressed Size       000008AB (2219)\n+D7871 Uncompressed Size     00001733 (5939)\n+D7875 Filename Length       0074 (116)\n+D7877 Extra Length          0000 (0)\n+D7879 Comment Length        0000 (0)\n+D787B Disk Start            0000 (0)\n+D787D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7301 Ext File Attributes   81A40000 (2175008768)\n+D787F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7305 Local Header Offset   0004DE1F (319007)\n-D7309 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7883 Local Header Offset   0004DDED (318957)\n+D7887 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7309: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7887: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D737D CENTRAL HEADER #389   02014B50 (33639248)\n-D7381 Created Zip Spec      14 (20) '2.0'\n-D7382 Created OS            03 (3) 'Unix'\n-D7383 Extract Zip Spec      14 (20) '2.0'\n-D7384 Extract OS            00 (0) 'MS-DOS'\n-D7385 General Purpose Flag  0800 (2048)\n+D78FB CENTRAL HEADER #389   02014B50 (33639248)\n+D78FF Created Zip Spec      14 (20) '2.0'\n+D7900 Created OS            03 (3) 'Unix'\n+D7901 Extract Zip Spec      14 (20) '2.0'\n+D7902 Extract OS            00 (0) 'MS-DOS'\n+D7903 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7387 Compression Method    0008 (8) 'Deflated'\n-D7389 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D738D CRC                   4BB1EABD (1269951165)\n-D7391 Compressed Size       00000764 (1892)\n-D7395 Uncompressed Size     0000167D (5757)\n-D7399 Filename Length       0077 (119)\n-D739B Extra Length          0000 (0)\n-D739D Comment Length        0000 (0)\n-D739F Disk Start            0000 (0)\n-D73A1 Int File Attributes   0000 (0)\n+D7905 Compression Method    0008 (8) 'Deflated'\n+D7907 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D790B CRC                   4BB1EABD (1269951165)\n+D790F Compressed Size       00000764 (1892)\n+D7913 Uncompressed Size     0000167D (5757)\n+D7917 Filename Length       0077 (119)\n+D7919 Extra Length          0000 (0)\n+D791B Comment Length        0000 (0)\n+D791D Disk Start            0000 (0)\n+D791F Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D73A3 Ext File Attributes   81A40000 (2175008768)\n+D7921 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D73A7 Local Header Offset   0004E75C (321372)\n-D73AB Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7925 Local Header Offset   0004E72A (321322)\n+D7929 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD73AB: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7929: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7422 CENTRAL HEADER #390   02014B50 (33639248)\n-D7426 Created Zip Spec      14 (20) '2.0'\n-D7427 Created OS            03 (3) 'Unix'\n-D7428 Extract Zip Spec      14 (20) '2.0'\n-D7429 Extract OS            00 (0) 'MS-DOS'\n-D742A General Purpose Flag  0800 (2048)\n+D79A0 CENTRAL HEADER #390   02014B50 (33639248)\n+D79A4 Created Zip Spec      14 (20) '2.0'\n+D79A5 Created OS            03 (3) 'Unix'\n+D79A6 Extract Zip Spec      14 (20) '2.0'\n+D79A7 Extract OS            00 (0) 'MS-DOS'\n+D79A8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D742C Compression Method    0008 (8) 'Deflated'\n-D742E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7432 CRC                   A18A8EB9 (2710212281)\n-D7436 Compressed Size       000011B4 (4532)\n-D743A Uncompressed Size     0000328A (12938)\n-D743E Filename Length       0077 (119)\n-D7440 Extra Length          0000 (0)\n-D7442 Comment Length        0000 (0)\n-D7444 Disk Start            0000 (0)\n-D7446 Int File Attributes   0000 (0)\n+D79AA Compression Method    0008 (8) 'Deflated'\n+D79AC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D79B0 CRC                   A18A8EB9 (2710212281)\n+D79B4 Compressed Size       000011B4 (4532)\n+D79B8 Uncompressed Size     0000328A (12938)\n+D79BC Filename Length       0077 (119)\n+D79BE Extra Length          0000 (0)\n+D79C0 Comment Length        0000 (0)\n+D79C2 Disk Start            0000 (0)\n+D79C4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7448 Ext File Attributes   81A40000 (2175008768)\n+D79C6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D744C Local Header Offset   0004EF55 (323413)\n-D7450 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D79CA Local Header Offset   0004EF23 (323363)\n+D79CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7450: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD79CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D74C7 CENTRAL HEADER #391   02014B50 (33639248)\n-D74CB Created Zip Spec      14 (20) '2.0'\n-D74CC Created OS            03 (3) 'Unix'\n-D74CD Extract Zip Spec      14 (20) '2.0'\n-D74CE Extract OS            00 (0) 'MS-DOS'\n-D74CF General Purpose Flag  0800 (2048)\n+D7A45 CENTRAL HEADER #391   02014B50 (33639248)\n+D7A49 Created Zip Spec      14 (20) '2.0'\n+D7A4A Created OS            03 (3) 'Unix'\n+D7A4B Extract Zip Spec      14 (20) '2.0'\n+D7A4C Extract OS            00 (0) 'MS-DOS'\n+D7A4D General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D74D1 Compression Method    0008 (8) 'Deflated'\n-D74D3 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D74D7 CRC                   B7B762D6 (3082248918)\n-D74DB Compressed Size       0000132C (4908)\n-D74DF Uncompressed Size     00003879 (14457)\n-D74E3 Filename Length       0076 (118)\n-D74E5 Extra Length          0000 (0)\n-D74E7 Comment Length        0000 (0)\n-D74E9 Disk Start            0000 (0)\n-D74EB Int File Attributes   0000 (0)\n+D7A4F Compression Method    0008 (8) 'Deflated'\n+D7A51 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7A55 CRC                   B7B762D6 (3082248918)\n+D7A59 Compressed Size       0000132C (4908)\n+D7A5D Uncompressed Size     00003879 (14457)\n+D7A61 Filename Length       0076 (118)\n+D7A63 Extra Length          0000 (0)\n+D7A65 Comment Length        0000 (0)\n+D7A67 Disk Start            0000 (0)\n+D7A69 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D74ED Ext File Attributes   81A40000 (2175008768)\n+D7A6B Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D74F1 Local Header Offset   0005019E (328094)\n-D74F5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7A6F Local Header Offset   0005016C (328044)\n+D7A73 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD74F5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7A73: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D756B CENTRAL HEADER #392   02014B50 (33639248)\n-D756F Created Zip Spec      14 (20) '2.0'\n-D7570 Created OS            03 (3) 'Unix'\n-D7571 Extract Zip Spec      14 (20) '2.0'\n-D7572 Extract OS            00 (0) 'MS-DOS'\n-D7573 General Purpose Flag  0800 (2048)\n+D7AE9 CENTRAL HEADER #392   02014B50 (33639248)\n+D7AED Created Zip Spec      14 (20) '2.0'\n+D7AEE Created OS            03 (3) 'Unix'\n+D7AEF Extract Zip Spec      14 (20) '2.0'\n+D7AF0 Extract OS            00 (0) 'MS-DOS'\n+D7AF1 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7575 Compression Method    0008 (8) 'Deflated'\n-D7577 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D757B CRC                   A2B9D29A (2730087066)\n-D757F Compressed Size       00000B19 (2841)\n-D7583 Uncompressed Size     00002150 (8528)\n-D7587 Filename Length       007A (122)\n-D7589 Extra Length          0000 (0)\n-D758B Comment Length        0000 (0)\n-D758D Disk Start            0000 (0)\n-D758F Int File Attributes   0000 (0)\n+D7AF3 Compression Method    0008 (8) 'Deflated'\n+D7AF5 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7AF9 CRC                   A2B9D29A (2730087066)\n+D7AFD Compressed Size       00000B19 (2841)\n+D7B01 Uncompressed Size     00002150 (8528)\n+D7B05 Filename Length       007A (122)\n+D7B07 Extra Length          0000 (0)\n+D7B09 Comment Length        0000 (0)\n+D7B0B Disk Start            0000 (0)\n+D7B0D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7591 Ext File Attributes   81A40000 (2175008768)\n+D7B0F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7595 Local Header Offset   0005155E (333150)\n-D7599 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7B13 Local Header Offset   0005152C (333100)\n+D7B17 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7599: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7B17: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7613 CENTRAL HEADER #393   02014B50 (33639248)\n-D7617 Created Zip Spec      14 (20) '2.0'\n-D7618 Created OS            03 (3) 'Unix'\n-D7619 Extract Zip Spec      14 (20) '2.0'\n-D761A Extract OS            00 (0) 'MS-DOS'\n-D761B General Purpose Flag  0800 (2048)\n+D7B91 CENTRAL HEADER #393   02014B50 (33639248)\n+D7B95 Created Zip Spec      14 (20) '2.0'\n+D7B96 Created OS            03 (3) 'Unix'\n+D7B97 Extract Zip Spec      14 (20) '2.0'\n+D7B98 Extract OS            00 (0) 'MS-DOS'\n+D7B99 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D761D Compression Method    0008 (8) 'Deflated'\n-D761F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7623 CRC                   C4FC7EA2 (3304881826)\n-D7627 Compressed Size       00000790 (1936)\n-D762B Uncompressed Size     000011DC (4572)\n-D762F Filename Length       0073 (115)\n-D7631 Extra Length          0000 (0)\n-D7633 Comment Length        0000 (0)\n-D7635 Disk Start            0000 (0)\n-D7637 Int File Attributes   0000 (0)\n+D7B9B Compression Method    0008 (8) 'Deflated'\n+D7B9D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7BA1 CRC                   C4FC7EA2 (3304881826)\n+D7BA5 Compressed Size       00000790 (1936)\n+D7BA9 Uncompressed Size     000011DC (4572)\n+D7BAD Filename Length       0073 (115)\n+D7BAF Extra Length          0000 (0)\n+D7BB1 Comment Length        0000 (0)\n+D7BB3 Disk Start            0000 (0)\n+D7BB5 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7639 Ext File Attributes   81A40000 (2175008768)\n+D7BB7 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D763D Local Header Offset   0005210F (336143)\n-D7641 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7BBB Local Header Offset   000520DD (336093)\n+D7BBF Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7641: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7BBF: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D76B4 CENTRAL HEADER #394   02014B50 (33639248)\n-D76B8 Created Zip Spec      14 (20) '2.0'\n-D76B9 Created OS            03 (3) 'Unix'\n-D76BA Extract Zip Spec      14 (20) '2.0'\n-D76BB Extract OS            00 (0) 'MS-DOS'\n-D76BC General Purpose Flag  0800 (2048)\n+D7C32 CENTRAL HEADER #394   02014B50 (33639248)\n+D7C36 Created Zip Spec      14 (20) '2.0'\n+D7C37 Created OS            03 (3) 'Unix'\n+D7C38 Extract Zip Spec      14 (20) '2.0'\n+D7C39 Extract OS            00 (0) 'MS-DOS'\n+D7C3A General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D76BE Compression Method    0008 (8) 'Deflated'\n-D76C0 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D76C4 CRC                   EE30A8D8 (3996166360)\n-D76C8 Compressed Size       00001911 (6417)\n-D76CC Uncompressed Size     000072FB (29435)\n-D76D0 Filename Length       0076 (118)\n-D76D2 Extra Length          0000 (0)\n-D76D4 Comment Length        0000 (0)\n-D76D6 Disk Start            0000 (0)\n-D76D8 Int File Attributes   0000 (0)\n+D7C3C Compression Method    0008 (8) 'Deflated'\n+D7C3E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7C42 CRC                   EE30A8D8 (3996166360)\n+D7C46 Compressed Size       00001911 (6417)\n+D7C4A Uncompressed Size     000072FB (29435)\n+D7C4E Filename Length       0076 (118)\n+D7C50 Extra Length          0000 (0)\n+D7C52 Comment Length        0000 (0)\n+D7C54 Disk Start            0000 (0)\n+D7C56 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D76DA Ext File Attributes   81A40000 (2175008768)\n+D7C58 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D76DE Local Header Offset   00052930 (338224)\n-D76E2 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7C5C Local Header Offset   000528FE (338174)\n+D7C60 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD76E2: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7C60: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7758 CENTRAL HEADER #395   02014B50 (33639248)\n-D775C Created Zip Spec      14 (20) '2.0'\n-D775D Created OS            03 (3) 'Unix'\n-D775E Extract Zip Spec      14 (20) '2.0'\n-D775F Extract OS            00 (0) 'MS-DOS'\n-D7760 General Purpose Flag  0800 (2048)\n+D7CD6 CENTRAL HEADER #395   02014B50 (33639248)\n+D7CDA Created Zip Spec      14 (20) '2.0'\n+D7CDB Created OS            03 (3) 'Unix'\n+D7CDC Extract Zip Spec      14 (20) '2.0'\n+D7CDD Extract OS            00 (0) 'MS-DOS'\n+D7CDE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7762 Compression Method    0008 (8) 'Deflated'\n-D7764 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7768 CRC                   EA36353C (3929421116)\n-D776C Compressed Size       0000104B (4171)\n-D7770 Uncompressed Size     0000480E (18446)\n-D7774 Filename Length       007C (124)\n-D7776 Extra Length          0000 (0)\n-D7778 Comment Length        0000 (0)\n-D777A Disk Start            0000 (0)\n-D777C Int File Attributes   0000 (0)\n+D7CE0 Compression Method    0008 (8) 'Deflated'\n+D7CE2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7CE6 CRC                   EA36353C (3929421116)\n+D7CEA Compressed Size       0000104B (4171)\n+D7CEE Uncompressed Size     0000480E (18446)\n+D7CF2 Filename Length       007C (124)\n+D7CF4 Extra Length          0000 (0)\n+D7CF6 Comment Length        0000 (0)\n+D7CF8 Disk Start            0000 (0)\n+D7CFA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D777E Ext File Attributes   81A40000 (2175008768)\n+D7CFC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7782 Local Header Offset   000542D5 (344789)\n-D7786 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7D00 Local Header Offset   000542A3 (344739)\n+D7D04 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7786: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7D04: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7802 CENTRAL HEADER #396   02014B50 (33639248)\n-D7806 Created Zip Spec      14 (20) '2.0'\n-D7807 Created OS            03 (3) 'Unix'\n-D7808 Extract Zip Spec      14 (20) '2.0'\n-D7809 Extract OS            00 (0) 'MS-DOS'\n-D780A General Purpose Flag  0800 (2048)\n+D7D80 CENTRAL HEADER #396   02014B50 (33639248)\n+D7D84 Created Zip Spec      14 (20) '2.0'\n+D7D85 Created OS            03 (3) 'Unix'\n+D7D86 Extract Zip Spec      14 (20) '2.0'\n+D7D87 Extract OS            00 (0) 'MS-DOS'\n+D7D88 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D780C Compression Method    0008 (8) 'Deflated'\n-D780E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7812 CRC                   CA474DE0 (3393670624)\n-D7816 Compressed Size       0000039D (925)\n-D781A Uncompressed Size     000007B6 (1974)\n-D781E Filename Length       007B (123)\n-D7820 Extra Length          0000 (0)\n-D7822 Comment Length        0000 (0)\n-D7824 Disk Start            0000 (0)\n-D7826 Int File Attributes   0000 (0)\n+D7D8A Compression Method    0008 (8) 'Deflated'\n+D7D8C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7D90 CRC                   CA474DE0 (3393670624)\n+D7D94 Compressed Size       0000039D (925)\n+D7D98 Uncompressed Size     000007B6 (1974)\n+D7D9C Filename Length       007B (123)\n+D7D9E Extra Length          0000 (0)\n+D7DA0 Comment Length        0000 (0)\n+D7DA2 Disk Start            0000 (0)\n+D7DA4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7828 Ext File Attributes   81A40000 (2175008768)\n+D7DA6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D782C Local Header Offset   000553BA (349114)\n-D7830 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7DAA Local Header Offset   00055388 (349064)\n+D7DAE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7830: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7DAE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D78AB CENTRAL HEADER #397   02014B50 (33639248)\n-D78AF Created Zip Spec      14 (20) '2.0'\n-D78B0 Created OS            03 (3) 'Unix'\n-D78B1 Extract Zip Spec      14 (20) '2.0'\n-D78B2 Extract OS            00 (0) 'MS-DOS'\n-D78B3 General Purpose Flag  0800 (2048)\n+D7E29 CENTRAL HEADER #397   02014B50 (33639248)\n+D7E2D Created Zip Spec      14 (20) '2.0'\n+D7E2E Created OS            03 (3) 'Unix'\n+D7E2F Extract Zip Spec      14 (20) '2.0'\n+D7E30 Extract OS            00 (0) 'MS-DOS'\n+D7E31 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D78B5 Compression Method    0008 (8) 'Deflated'\n-D78B7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D78BB CRC                   A19F99D4 (2711591380)\n-D78BF Compressed Size       0000065E (1630)\n-D78C3 Uncompressed Size     000011CB (4555)\n-D78C7 Filename Length       0077 (119)\n-D78C9 Extra Length          0000 (0)\n-D78CB Comment Length        0000 (0)\n-D78CD Disk Start            0000 (0)\n-D78CF Int File Attributes   0000 (0)\n+D7E33 Compression Method    0008 (8) 'Deflated'\n+D7E35 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7E39 CRC                   A19F99D4 (2711591380)\n+D7E3D Compressed Size       0000065E (1630)\n+D7E41 Uncompressed Size     000011CB (4555)\n+D7E45 Filename Length       0077 (119)\n+D7E47 Extra Length          0000 (0)\n+D7E49 Comment Length        0000 (0)\n+D7E4B Disk Start            0000 (0)\n+D7E4D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D78D1 Ext File Attributes   81A40000 (2175008768)\n+D7E4F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D78D5 Local Header Offset   000557F0 (350192)\n-D78D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7E53 Local Header Offset   000557BE (350142)\n+D7E57 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD78D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7E57: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7950 CENTRAL HEADER #398   02014B50 (33639248)\n-D7954 Created Zip Spec      14 (20) '2.0'\n-D7955 Created OS            03 (3) 'Unix'\n-D7956 Extract Zip Spec      14 (20) '2.0'\n-D7957 Extract OS            00 (0) 'MS-DOS'\n-D7958 General Purpose Flag  0800 (2048)\n+D7ECE CENTRAL HEADER #398   02014B50 (33639248)\n+D7ED2 Created Zip Spec      14 (20) '2.0'\n+D7ED3 Created OS            03 (3) 'Unix'\n+D7ED4 Extract Zip Spec      14 (20) '2.0'\n+D7ED5 Extract OS            00 (0) 'MS-DOS'\n+D7ED6 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D795A Compression Method    0008 (8) 'Deflated'\n-D795C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7960 CRC                   7573E84B (1970530379)\n-D7964 Compressed Size       00000ED9 (3801)\n-D7968 Uncompressed Size     0000284F (10319)\n-D796C Filename Length       0073 (115)\n-D796E Extra Length          0000 (0)\n-D7970 Comment Length        0000 (0)\n-D7972 Disk Start            0000 (0)\n-D7974 Int File Attributes   0000 (0)\n+D7ED8 Compression Method    0008 (8) 'Deflated'\n+D7EDA Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7EDE CRC                   7573E84B (1970530379)\n+D7EE2 Compressed Size       00000ED9 (3801)\n+D7EE6 Uncompressed Size     0000284F (10319)\n+D7EEA Filename Length       0073 (115)\n+D7EEC Extra Length          0000 (0)\n+D7EEE Comment Length        0000 (0)\n+D7EF0 Disk Start            0000 (0)\n+D7EF2 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7976 Ext File Attributes   81A40000 (2175008768)\n+D7EF4 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D797A Local Header Offset   00055EE3 (351971)\n-D797E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7EF8 Local Header Offset   00055EB1 (351921)\n+D7EFC Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD797E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7EFC: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D79F1 CENTRAL HEADER #399   02014B50 (33639248)\n-D79F5 Created Zip Spec      14 (20) '2.0'\n-D79F6 Created OS            03 (3) 'Unix'\n-D79F7 Extract Zip Spec      14 (20) '2.0'\n-D79F8 Extract OS            00 (0) 'MS-DOS'\n-D79F9 General Purpose Flag  0800 (2048)\n+D7F6F CENTRAL HEADER #399   02014B50 (33639248)\n+D7F73 Created Zip Spec      14 (20) '2.0'\n+D7F74 Created OS            03 (3) 'Unix'\n+D7F75 Extract Zip Spec      14 (20) '2.0'\n+D7F76 Extract OS            00 (0) 'MS-DOS'\n+D7F77 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D79FB Compression Method    0008 (8) 'Deflated'\n-D79FD Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7A01 CRC                   131CB9D8 (320649688)\n-D7A05 Compressed Size       00000B4D (2893)\n-D7A09 Uncompressed Size     00002777 (10103)\n-D7A0D Filename Length       0077 (119)\n-D7A0F Extra Length          0000 (0)\n-D7A11 Comment Length        0000 (0)\n-D7A13 Disk Start            0000 (0)\n-D7A15 Int File Attributes   0000 (0)\n+D7F79 Compression Method    0008 (8) 'Deflated'\n+D7F7B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D7F7F CRC                   131CB9D8 (320649688)\n+D7F83 Compressed Size       00000B4D (2893)\n+D7F87 Uncompressed Size     00002777 (10103)\n+D7F8B Filename Length       0077 (119)\n+D7F8D Extra Length          0000 (0)\n+D7F8F Comment Length        0000 (0)\n+D7F91 Disk Start            0000 (0)\n+D7F93 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7A17 Ext File Attributes   81A40000 (2175008768)\n+D7F95 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7A1B Local Header Offset   00056E4D (355917)\n-D7A1F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D7F99 Local Header Offset   00056E1B (355867)\n+D7F9D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7A1F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD7F9D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7A96 CENTRAL HEADER #400   02014B50 (33639248)\n-D7A9A Created Zip Spec      14 (20) '2.0'\n-D7A9B Created OS            03 (3) 'Unix'\n-D7A9C Extract Zip Spec      14 (20) '2.0'\n-D7A9D Extract OS            00 (0) 'MS-DOS'\n-D7A9E General Purpose Flag  0800 (2048)\n+D8014 CENTRAL HEADER #400   02014B50 (33639248)\n+D8018 Created Zip Spec      14 (20) '2.0'\n+D8019 Created OS            03 (3) 'Unix'\n+D801A Extract Zip Spec      14 (20) '2.0'\n+D801B Extract OS            00 (0) 'MS-DOS'\n+D801C General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7AA0 Compression Method    0008 (8) 'Deflated'\n-D7AA2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7AA6 CRC                   95FAB1DA (2516234714)\n-D7AAA Compressed Size       00000678 (1656)\n-D7AAE Uncompressed Size     0000110D (4365)\n-D7AB2 Filename Length       0076 (118)\n-D7AB4 Extra Length          0000 (0)\n-D7AB6 Comment Length        0000 (0)\n-D7AB8 Disk Start            0000 (0)\n-D7ABA Int File Attributes   0000 (0)\n+D801E Compression Method    0008 (8) 'Deflated'\n+D8020 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8024 CRC                   95FAB1DA (2516234714)\n+D8028 Compressed Size       00000678 (1656)\n+D802C Uncompressed Size     0000110D (4365)\n+D8030 Filename Length       0076 (118)\n+D8032 Extra Length          0000 (0)\n+D8034 Comment Length        0000 (0)\n+D8036 Disk Start            0000 (0)\n+D8038 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7ABC Ext File Attributes   81A40000 (2175008768)\n+D803A Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7AC0 Local Header Offset   00057A2F (358959)\n-D7AC4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D803E Local Header Offset   000579FD (358909)\n+D8042 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7AC4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD8042: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7B3A CENTRAL HEADER #401   02014B50 (33639248)\n-D7B3E Created Zip Spec      14 (20) '2.0'\n-D7B3F Created OS            03 (3) 'Unix'\n-D7B40 Extract Zip Spec      14 (20) '2.0'\n-D7B41 Extract OS            00 (0) 'MS-DOS'\n-D7B42 General Purpose Flag  0800 (2048)\n+D80B8 CENTRAL HEADER #401   02014B50 (33639248)\n+D80BC Created Zip Spec      14 (20) '2.0'\n+D80BD Created OS            03 (3) 'Unix'\n+D80BE Extract Zip Spec      14 (20) '2.0'\n+D80BF Extract OS            00 (0) 'MS-DOS'\n+D80C0 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7B44 Compression Method    0008 (8) 'Deflated'\n-D7B46 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7B4A CRC                   B1E82858 (2984781912)\n-D7B4E Compressed Size       000007DE (2014)\n-D7B52 Uncompressed Size     000019D6 (6614)\n-D7B56 Filename Length       0079 (121)\n-D7B58 Extra Length          0000 (0)\n-D7B5A Comment Length        0000 (0)\n-D7B5C Disk Start            0000 (0)\n-D7B5E Int File Attributes   0000 (0)\n+D80C2 Compression Method    0008 (8) 'Deflated'\n+D80C4 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D80C8 CRC                   B1E82858 (2984781912)\n+D80CC Compressed Size       000007DE (2014)\n+D80D0 Uncompressed Size     000019D6 (6614)\n+D80D4 Filename Length       0079 (121)\n+D80D6 Extra Length          0000 (0)\n+D80D8 Comment Length        0000 (0)\n+D80DA Disk Start            0000 (0)\n+D80DC Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7B60 Ext File Attributes   81A40000 (2175008768)\n+D80DE Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7B64 Local Header Offset   0005813B (360763)\n-D7B68 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D80E2 Local Header Offset   00058109 (360713)\n+D80E6 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7B68: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD80E6: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7BE1 CENTRAL HEADER #402   02014B50 (33639248)\n-D7BE5 Created Zip Spec      14 (20) '2.0'\n-D7BE6 Created OS            03 (3) 'Unix'\n-D7BE7 Extract Zip Spec      14 (20) '2.0'\n-D7BE8 Extract OS            00 (0) 'MS-DOS'\n-D7BE9 General Purpose Flag  0800 (2048)\n+D815F CENTRAL HEADER #402   02014B50 (33639248)\n+D8163 Created Zip Spec      14 (20) '2.0'\n+D8164 Created OS            03 (3) 'Unix'\n+D8165 Extract Zip Spec      14 (20) '2.0'\n+D8166 Extract OS            00 (0) 'MS-DOS'\n+D8167 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7BEB Compression Method    0008 (8) 'Deflated'\n-D7BED Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7BF1 CRC                   EA13965E (3927152222)\n-D7BF5 Compressed Size       00000529 (1321)\n-D7BF9 Uncompressed Size     00000F7E (3966)\n-D7BFD Filename Length       0076 (118)\n-D7BFF Extra Length          0000 (0)\n-D7C01 Comment Length        0000 (0)\n-D7C03 Disk Start            0000 (0)\n-D7C05 Int File Attributes   0000 (0)\n+D8169 Compression Method    0008 (8) 'Deflated'\n+D816B Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D816F CRC                   EA13965E (3927152222)\n+D8173 Compressed Size       00000529 (1321)\n+D8177 Uncompressed Size     00000F7E (3966)\n+D817B Filename Length       0076 (118)\n+D817D Extra Length          0000 (0)\n+D817F Comment Length        0000 (0)\n+D8181 Disk Start            0000 (0)\n+D8183 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7C07 Ext File Attributes   81A40000 (2175008768)\n+D8185 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7C0B Local Header Offset   000589B0 (362928)\n-D7C0F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D8189 Local Header Offset   0005897E (362878)\n+D818D Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7C0F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD818D: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7C85 CENTRAL HEADER #403   02014B50 (33639248)\n-D7C89 Created Zip Spec      14 (20) '2.0'\n-D7C8A Created OS            03 (3) 'Unix'\n-D7C8B Extract Zip Spec      14 (20) '2.0'\n-D7C8C Extract OS            00 (0) 'MS-DOS'\n-D7C8D General Purpose Flag  0800 (2048)\n+D8203 CENTRAL HEADER #403   02014B50 (33639248)\n+D8207 Created Zip Spec      14 (20) '2.0'\n+D8208 Created OS            03 (3) 'Unix'\n+D8209 Extract Zip Spec      14 (20) '2.0'\n+D820A Extract OS            00 (0) 'MS-DOS'\n+D820B General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7C8F Compression Method    0008 (8) 'Deflated'\n-D7C91 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7C95 CRC                   C8903588 (3364894088)\n-D7C99 Compressed Size       00000D5E (3422)\n-D7C9D Uncompressed Size     00002CD6 (11478)\n-D7CA1 Filename Length       006F (111)\n-D7CA3 Extra Length          0000 (0)\n-D7CA5 Comment Length        0000 (0)\n-D7CA7 Disk Start            0000 (0)\n-D7CA9 Int File Attributes   0000 (0)\n+D820D Compression Method    0008 (8) 'Deflated'\n+D820F Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8213 CRC                   C8903588 (3364894088)\n+D8217 Compressed Size       00000D5E (3422)\n+D821B Uncompressed Size     00002CD6 (11478)\n+D821F Filename Length       006F (111)\n+D8221 Extra Length          0000 (0)\n+D8223 Comment Length        0000 (0)\n+D8225 Disk Start            0000 (0)\n+D8227 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7CAB Ext File Attributes   81A40000 (2175008768)\n+D8229 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7CAF Local Header Offset   00058F6D (364397)\n-D7CB3 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D822D Local Header Offset   00058F3B (364347)\n+D8231 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7CB3: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD8231: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7D22 CENTRAL HEADER #404   02014B50 (33639248)\n-D7D26 Created Zip Spec      14 (20) '2.0'\n-D7D27 Created OS            03 (3) 'Unix'\n-D7D28 Extract Zip Spec      14 (20) '2.0'\n-D7D29 Extract OS            00 (0) 'MS-DOS'\n-D7D2A General Purpose Flag  0800 (2048)\n+D82A0 CENTRAL HEADER #404   02014B50 (33639248)\n+D82A4 Created Zip Spec      14 (20) '2.0'\n+D82A5 Created OS            03 (3) 'Unix'\n+D82A6 Extract Zip Spec      14 (20) '2.0'\n+D82A7 Extract OS            00 (0) 'MS-DOS'\n+D82A8 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7D2C Compression Method    0008 (8) 'Deflated'\n-D7D2E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7D32 CRC                   D19560D0 (3516227792)\n-D7D36 Compressed Size       000003BB (955)\n-D7D3A Uncompressed Size     00000A2F (2607)\n-D7D3E Filename Length       0080 (128)\n-D7D40 Extra Length          0000 (0)\n-D7D42 Comment Length        0000 (0)\n-D7D44 Disk Start            0000 (0)\n-D7D46 Int File Attributes   0000 (0)\n+D82AA Compression Method    0008 (8) 'Deflated'\n+D82AC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D82B0 CRC                   D19560D0 (3516227792)\n+D82B4 Compressed Size       000003BB (955)\n+D82B8 Uncompressed Size     00000A2F (2607)\n+D82BC Filename Length       0080 (128)\n+D82BE Extra Length          0000 (0)\n+D82C0 Comment Length        0000 (0)\n+D82C2 Disk Start            0000 (0)\n+D82C4 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7D48 Ext File Attributes   81A40000 (2175008768)\n+D82C6 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7D4C Local Header Offset   00059D58 (367960)\n-D7D50 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D82CA Local Header Offset   00059D26 (367910)\n+D82CE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7D50: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD82CE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7DD0 CENTRAL HEADER #405   02014B50 (33639248)\n-D7DD4 Created Zip Spec      14 (20) '2.0'\n-D7DD5 Created OS            03 (3) 'Unix'\n-D7DD6 Extract Zip Spec      14 (20) '2.0'\n-D7DD7 Extract OS            00 (0) 'MS-DOS'\n-D7DD8 General Purpose Flag  0800 (2048)\n+D834E CENTRAL HEADER #405   02014B50 (33639248)\n+D8352 Created Zip Spec      14 (20) '2.0'\n+D8353 Created OS            03 (3) 'Unix'\n+D8354 Extract Zip Spec      14 (20) '2.0'\n+D8355 Extract OS            00 (0) 'MS-DOS'\n+D8356 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7DDA Compression Method    0008 (8) 'Deflated'\n-D7DDC Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7DE0 CRC                   CB05D09B (3406155931)\n-D7DE4 Compressed Size       000017FC (6140)\n-D7DE8 Uncompressed Size     00005230 (21040)\n-D7DEC Filename Length       0084 (132)\n-D7DEE Extra Length          0000 (0)\n-D7DF0 Comment Length        0000 (0)\n-D7DF2 Disk Start            0000 (0)\n-D7DF4 Int File Attributes   0000 (0)\n+D8358 Compression Method    0008 (8) 'Deflated'\n+D835A Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D835E CRC                   CB05D09B (3406155931)\n+D8362 Compressed Size       000017FC (6140)\n+D8366 Uncompressed Size     00005230 (21040)\n+D836A Filename Length       0084 (132)\n+D836C Extra Length          0000 (0)\n+D836E Comment Length        0000 (0)\n+D8370 Disk Start            0000 (0)\n+D8372 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7DF6 Ext File Attributes   81A40000 (2175008768)\n+D8374 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7DFA Local Header Offset   0005A1B1 (369073)\n-D7DFE Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D8378 Local Header Offset   0005A17F (369023)\n+D837C Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD7DFE: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD837C: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7E82 CENTRAL HEADER #406   02014B50 (33639248)\n-D7E86 Created Zip Spec      14 (20) '2.0'\n-D7E87 Created OS            03 (3) 'Unix'\n-D7E88 Extract Zip Spec      14 (20) '2.0'\n-D7E89 Extract OS            00 (0) 'MS-DOS'\n-D7E8A General Purpose Flag  0800 (2048)\n+D8400 CENTRAL HEADER #406   02014B50 (33639248)\n+D8404 Created Zip Spec      14 (20) '2.0'\n+D8405 Created OS            03 (3) 'Unix'\n+D8406 Extract Zip Spec      14 (20) '2.0'\n+D8407 Extract OS            00 (0) 'MS-DOS'\n+D8408 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7E8C Compression Method    0008 (8) 'Deflated'\n-D7E8E Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7E92 CRC                   17E2323C (400699964)\n-D7E96 Compressed Size       00000487 (1159)\n-D7E9A Uncompressed Size     00000904 (2308)\n-D7E9E Filename Length       0088 (136)\n-D7EA0 Extra Length          0000 (0)\n-D7EA2 Comment Length        0000 (0)\n-D7EA4 Disk Start            0000 (0)\n-D7EA6 Int File Attributes   0000 (0)\n+D840A Compression Method    0008 (8) 'Deflated'\n+D840C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8410 CRC                   17E2323C (400699964)\n+D8414 Compressed Size       00000487 (1159)\n+D8418 Uncompressed Size     00000904 (2308)\n+D841C Filename Length       0088 (136)\n+D841E Extra Length          0000 (0)\n+D8420 Comment Length        0000 (0)\n+D8422 Disk Start            0000 (0)\n+D8424 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7EA8 Ext File Attributes   81A40000 (2175008768)\n+D8426 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7EAC Local Header Offset   0005BA4F (375375)\n-D7EB0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D842A Local Header Offset   0005BA1D (375325)\n+D842E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXX'\n #\n-# WARNING: Offset 0xD7EB0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD842E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7F38 CENTRAL HEADER #407   02014B50 (33639248)\n-D7F3C Created Zip Spec      14 (20) '2.0'\n-D7F3D Created OS            03 (3) 'Unix'\n-D7F3E Extract Zip Spec      14 (20) '2.0'\n-D7F3F Extract OS            00 (0) 'MS-DOS'\n-D7F40 General Purpose Flag  0800 (2048)\n+D84B6 CENTRAL HEADER #407   02014B50 (33639248)\n+D84BA Created Zip Spec      14 (20) '2.0'\n+D84BB Created OS            03 (3) 'Unix'\n+D84BC Extract Zip Spec      14 (20) '2.0'\n+D84BD Extract OS            00 (0) 'MS-DOS'\n+D84BE General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D7F42 Compression Method    0008 (8) 'Deflated'\n-D7F44 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D7F48 CRC                   CC28EBBC (3425233852)\n-D7F4C Compressed Size       00000776 (1910)\n-D7F50 Uncompressed Size     00001036 (4150)\n-D7F54 Filename Length       0093 (147)\n-D7F56 Extra Length          0000 (0)\n-D7F58 Comment Length        0000 (0)\n-D7F5A Disk Start            0000 (0)\n-D7F5C Int File Attributes   0000 (0)\n+D84C0 Compression Method    0008 (8) 'Deflated'\n+D84C2 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D84C6 CRC                   CC28EBBC (3425233852)\n+D84CA Compressed Size       00000776 (1910)\n+D84CE Uncompressed Size     00001036 (4150)\n+D84D2 Filename Length       0093 (147)\n+D84D4 Extra Length          0000 (0)\n+D84D6 Comment Length        0000 (0)\n+D84D8 Disk Start            0000 (0)\n+D84DA Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D7F5E Ext File Attributes   81A40000 (2175008768)\n+D84DC Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D7F62 Local Header Offset   0005BF7C (376700)\n-D7F66 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D84E0 Local Header Offset   0005BF4A (376650)\n+D84E4 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             XXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD7F66: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD84E4: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D7FF9 CENTRAL HEADER #408   02014B50 (33639248)\n-D7FFD Created Zip Spec      14 (20) '2.0'\n-D7FFE Created OS            03 (3) 'Unix'\n-D7FFF Extract Zip Spec      14 (20) '2.0'\n-D8000 Extract OS            00 (0) 'MS-DOS'\n-D8001 General Purpose Flag  0800 (2048)\n+D8577 CENTRAL HEADER #408   02014B50 (33639248)\n+D857B Created Zip Spec      14 (20) '2.0'\n+D857C Created OS            03 (3) 'Unix'\n+D857D Extract Zip Spec      14 (20) '2.0'\n+D857E Extract OS            00 (0) 'MS-DOS'\n+D857F General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D8003 Compression Method    0008 (8) 'Deflated'\n-D8005 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D8009 CRC                   3FC95820 (1070159904)\n-D800D Compressed Size       000004B8 (1208)\n-D8011 Uncompressed Size     00000AD4 (2772)\n-D8015 Filename Length       0084 (132)\n-D8017 Extra Length          0000 (0)\n-D8019 Comment Length        0000 (0)\n-D801B Disk Start            0000 (0)\n-D801D Int File Attributes   0000 (0)\n+D8581 Compression Method    0008 (8) 'Deflated'\n+D8583 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8587 CRC                   3FC95820 (1070159904)\n+D858B Compressed Size       000004B8 (1208)\n+D858F Uncompressed Size     00000AD4 (2772)\n+D8593 Filename Length       0084 (132)\n+D8595 Extra Length          0000 (0)\n+D8597 Comment Length        0000 (0)\n+D8599 Disk Start            0000 (0)\n+D859B Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D801F Ext File Attributes   81A40000 (2175008768)\n+D859D Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D8023 Local Header Offset   0005C7A3 (378787)\n-D8027 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n+D85A1 Local Header Offset   0005C771 (378737)\n+D85A5 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\n                             '\n #\n-# WARNING: Offset 0xD8027: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD85A5: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D80AB CENTRAL HEADER #409   02014B50 (33639248)\n-D80AF Created Zip Spec      14 (20) '2.0'\n-D80B0 Created OS            03 (3) 'Unix'\n-D80B1 Extract Zip Spec      14 (20) '2.0'\n-D80B2 Extract OS            00 (0) 'MS-DOS'\n-D80B3 General Purpose Flag  0800 (2048)\n+D8629 CENTRAL HEADER #409   02014B50 (33639248)\n+D862D Created Zip Spec      14 (20) '2.0'\n+D862E Created OS            03 (3) 'Unix'\n+D862F Extract Zip Spec      14 (20) '2.0'\n+D8630 Extract OS            00 (0) 'MS-DOS'\n+D8631 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D80B5 Compression Method    0008 (8) 'Deflated'\n-D80B7 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D80BB CRC                   41CBDE11 (1103879697)\n-D80BF Compressed Size       000005EA (1514)\n-D80C3 Uncompressed Size     00000D2F (3375)\n-D80C7 Filename Length       0073 (115)\n-D80C9 Extra Length          0000 (0)\n-D80CB Comment Length        0000 (0)\n-D80CD Disk Start            0000 (0)\n-D80CF Int File Attributes   0000 (0)\n+D8633 Compression Method    0008 (8) 'Deflated'\n+D8635 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8639 CRC                   41CBDE11 (1103879697)\n+D863D Compressed Size       000005EA (1514)\n+D8641 Uncompressed Size     00000D2F (3375)\n+D8645 Filename Length       0073 (115)\n+D8647 Extra Length          0000 (0)\n+D8649 Comment Length        0000 (0)\n+D864B Disk Start            0000 (0)\n+D864D Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D80D1 Ext File Attributes   81A40000 (2175008768)\n+D864F Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D80D5 Local Header Offset   0005CCFD (380157)\n-D80D9 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D8653 Local Header Offset   0005CCCB (380107)\n+D8657 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD80D9: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD8657: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D814C CENTRAL HEADER #410   02014B50 (33639248)\n-D8150 Created Zip Spec      14 (20) '2.0'\n-D8151 Created OS            03 (3) 'Unix'\n-D8152 Extract Zip Spec      14 (20) '2.0'\n-D8153 Extract OS            00 (0) 'MS-DOS'\n-D8154 General Purpose Flag  0800 (2048)\n+D86CA CENTRAL HEADER #410   02014B50 (33639248)\n+D86CE Created Zip Spec      14 (20) '2.0'\n+D86CF Created OS            03 (3) 'Unix'\n+D86D0 Extract Zip Spec      14 (20) '2.0'\n+D86D1 Extract OS            00 (0) 'MS-DOS'\n+D86D2 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D8156 Compression Method    0008 (8) 'Deflated'\n-D8158 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D815C CRC                   1D768ED5 (494309077)\n-D8160 Compressed Size       00000834 (2100)\n-D8164 Uncompressed Size     00001C79 (7289)\n-D8168 Filename Length       0079 (121)\n-D816A Extra Length          0000 (0)\n-D816C Comment Length        0000 (0)\n-D816E Disk Start            0000 (0)\n-D8170 Int File Attributes   0000 (0)\n+D86D4 Compression Method    0008 (8) 'Deflated'\n+D86D6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D86DA CRC                   1D768ED5 (494309077)\n+D86DE Compressed Size       00000834 (2100)\n+D86E2 Uncompressed Size     00001C79 (7289)\n+D86E6 Filename Length       0079 (121)\n+D86E8 Extra Length          0000 (0)\n+D86EA Comment Length        0000 (0)\n+D86EC Disk Start            0000 (0)\n+D86EE Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D8172 Ext File Attributes   81A40000 (2175008768)\n+D86F0 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D8176 Local Header Offset   0005D378 (381816)\n-D817A Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D86F4 Local Header Offset   0005D346 (381766)\n+D86F8 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD817A: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD86F8: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D81F3 CENTRAL HEADER #411   02014B50 (33639248)\n-D81F7 Created Zip Spec      14 (20) '2.0'\n-D81F8 Created OS            03 (3) 'Unix'\n-D81F9 Extract Zip Spec      14 (20) '2.0'\n-D81FA Extract OS            00 (0) 'MS-DOS'\n-D81FB General Purpose Flag  0800 (2048)\n+D8771 CENTRAL HEADER #411   02014B50 (33639248)\n+D8775 Created Zip Spec      14 (20) '2.0'\n+D8776 Created OS            03 (3) 'Unix'\n+D8777 Extract Zip Spec      14 (20) '2.0'\n+D8778 Extract OS            00 (0) 'MS-DOS'\n+D8779 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D81FD Compression Method    0008 (8) 'Deflated'\n-D81FF Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D8203 CRC                   7A85C658 (2055587416)\n-D8207 Compressed Size       0000085F (2143)\n-D820B Uncompressed Size     00001D19 (7449)\n-D820F Filename Length       0081 (129)\n-D8211 Extra Length          0000 (0)\n-D8213 Comment Length        0000 (0)\n-D8215 Disk Start            0000 (0)\n-D8217 Int File Attributes   0000 (0)\n+D877B Compression Method    0008 (8) 'Deflated'\n+D877D Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8781 CRC                   7A85C658 (2055587416)\n+D8785 Compressed Size       0000085F (2143)\n+D8789 Uncompressed Size     00001D19 (7449)\n+D878D Filename Length       0081 (129)\n+D878F Extra Length          0000 (0)\n+D8791 Comment Length        0000 (0)\n+D8793 Disk Start            0000 (0)\n+D8795 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D8219 Ext File Attributes   81A40000 (2175008768)\n+D8797 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D821D Local Header Offset   0005DC43 (384067)\n-D8221 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D879B Local Header Offset   0005DC11 (384017)\n+D879F Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD8221: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD879F: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D82A2 CENTRAL HEADER #412   02014B50 (33639248)\n-D82A6 Created Zip Spec      14 (20) '2.0'\n-D82A7 Created OS            03 (3) 'Unix'\n-D82A8 Extract Zip Spec      14 (20) '2.0'\n-D82A9 Extract OS            00 (0) 'MS-DOS'\n-D82AA General Purpose Flag  0800 (2048)\n+D8820 CENTRAL HEADER #412   02014B50 (33639248)\n+D8824 Created Zip Spec      14 (20) '2.0'\n+D8825 Created OS            03 (3) 'Unix'\n+D8826 Extract Zip Spec      14 (20) '2.0'\n+D8827 Extract OS            00 (0) 'MS-DOS'\n+D8828 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D82AC Compression Method    0008 (8) 'Deflated'\n-D82AE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D82B2 CRC                   907F6F99 (2424270745)\n-D82B6 Compressed Size       0006AD4F (437583)\n-D82BA Uncompressed Size     0042155F (4330847)\n-D82BE Filename Length       001A (26)\n-D82C0 Extra Length          0000 (0)\n-D82C2 Comment Length        0000 (0)\n-D82C4 Disk Start            0000 (0)\n-D82C6 Int File Attributes   0000 (0)\n+D882A Compression Method    0008 (8) 'Deflated'\n+D882C Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8830 CRC                   9E31BAE2 (2654059234)\n+D8834 Compressed Size       0006B2FF (439039)\n+D8838 Uncompressed Size     00421547 (4330823)\n+D883C Filename Length       001A (26)\n+D883E Extra Length          0000 (0)\n+D8840 Comment Length        0000 (0)\n+D8842 Disk Start            0000 (0)\n+D8844 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D82C8 Ext File Attributes   81A40000 (2175008768)\n+D8846 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D82CC Local Header Offset   0005E541 (386369)\n-D82D0 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D884A Local Header Offset   0005E50F (386319)\n+D884E Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD82D0: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD884E: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D82EA CENTRAL HEADER #413   02014B50 (33639248)\n-D82EE Created Zip Spec      14 (20) '2.0'\n-D82EF Created OS            03 (3) 'Unix'\n-D82F0 Extract Zip Spec      14 (20) '2.0'\n-D82F1 Extract OS            00 (0) 'MS-DOS'\n-D82F2 General Purpose Flag  0800 (2048)\n+D8868 CENTRAL HEADER #413   02014B50 (33639248)\n+D886C Created Zip Spec      14 (20) '2.0'\n+D886D Created OS            03 (3) 'Unix'\n+D886E Extract Zip Spec      14 (20) '2.0'\n+D886F Extract OS            00 (0) 'MS-DOS'\n+D8870 General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D82F4 Compression Method    0008 (8) 'Deflated'\n-D82F6 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D82FA CRC                   E19FACFF (3785338111)\n-D82FE Compressed Size       000007BF (1983)\n-D8302 Uncompressed Size     00001EAA (7850)\n-D8306 Filename Length       003C (60)\n-D8308 Extra Length          0000 (0)\n-D830A Comment Length        0000 (0)\n-D830C Disk Start            0000 (0)\n-D830E Int File Attributes   0000 (0)\n+D8872 Compression Method    0008 (8) 'Deflated'\n+D8874 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D8878 CRC                   E19FACFF (3785338111)\n+D887C Compressed Size       000007BF (1983)\n+D8880 Uncompressed Size     00001EAA (7850)\n+D8884 Filename Length       003C (60)\n+D8886 Extra Length          0000 (0)\n+D8888 Comment Length        0000 (0)\n+D888A Disk Start            0000 (0)\n+D888C Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D8310 Ext File Attributes   81A40000 (2175008768)\n+D888E Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D8314 Local Header Offset   000C92C8 (824008)\n-D8318 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D8892 Local Header Offset   000C9846 (825414)\n+D8896 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD8318: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD8896: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D8354 CENTRAL HEADER #414   02014B50 (33639248)\n-D8358 Created Zip Spec      14 (20) '2.0'\n-D8359 Created OS            03 (3) 'Unix'\n-D835A Extract Zip Spec      14 (20) '2.0'\n-D835B Extract OS            00 (0) 'MS-DOS'\n-D835C General Purpose Flag  0800 (2048)\n+D88D2 CENTRAL HEADER #414   02014B50 (33639248)\n+D88D6 Created Zip Spec      14 (20) '2.0'\n+D88D7 Created OS            03 (3) 'Unix'\n+D88D8 Extract Zip Spec      14 (20) '2.0'\n+D88D9 Extract OS            00 (0) 'MS-DOS'\n+D88DA General Purpose Flag  0800 (2048)\n       [Bits 1-2]            0 'Normal Compression'\n       [Bit 11]              1 'Language Encoding'\n-D835E Compression Method    0008 (8) 'Deflated'\n-D8360 Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n-D8364 CRC                   E1CBB499 (3788223641)\n-D8368 Compressed Size       00000047 (71)\n-D836C Uncompressed Size     0000004A (74)\n-D8370 Filename Length       0043 (67)\n-D8372 Extra Length          0000 (0)\n-D8374 Comment Length        0000 (0)\n-D8376 Disk Start            0000 (0)\n-D8378 Int File Attributes   0000 (0)\n+D88DC Compression Method    0008 (8) 'Deflated'\n+D88DE Modification Time     58DBB537 (1490793783) 'Thu Jun 27 22:41:46 2024'\n+D88E2 CRC                   E1CBB499 (3788223641)\n+D88E6 Compressed Size       00000047 (71)\n+D88EA Uncompressed Size     0000004A (74)\n+D88EE Filename Length       0043 (67)\n+D88F0 Extra Length          0000 (0)\n+D88F2 Comment Length        0000 (0)\n+D88F4 Disk Start            0000 (0)\n+D88F6 Int File Attributes   0000 (0)\n       [Bit 0]               0 'Binary Data'\n-D837A Ext File Attributes   81A40000 (2175008768)\n+D88F8 Ext File Attributes   81A40000 (2175008768)\n       [Bits 16-24]          01A4 (420) 'Unix attrib: rw-r--r--'\n       [Bits 28-31]          08 (8) 'Regular File'\n-D837E Local Header Offset   000C9AE1 (826081)\n-D8382 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+D88FC Local Header Offset   000CA05F (827487)\n+D8900 Filename              'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #\n-# WARNING: Offset 0xD8382: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n+# WARNING: Offset 0xD8900: Filename 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'\n #          Zero length filename\n #\n \n-D83C5 END CENTRAL HEADER    06054B50 (101010256)\n-D83C9 Number of this disk   0000 (0)\n-D83CB Central Dir Disk no   0000 (0)\n-D83CD Entries in this disk  019E (414)\n-D83CF Total Entries         019E (414)\n-D83D1 Size of Central Dir   0000E83C (59452)\n-D83D5 Offset to Central Dir 000C9B89 (826249)\n-D83D9 Comment Length        0000 (0)\n+D8943 END CENTRAL HEADER    06054B50 (101010256)\n+D8947 Number of this disk   0000 (0)\n+D8949 Central Dir Disk no   0000 (0)\n+D894B Entries in this disk  019E (414)\n+D894D Total Entries         019E (414)\n+D894F Size of Central Dir   0000E83C (59452)\n+D8953 Offset to Central Dir 000CA107 (827655)\n+D8957 Comment Length        0000 (0)\n #\n # Error Count: 249\n # Warning Count: 1077\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-M4\n Build-Branch:UNKNOWN\n Build-Revision:19c5be0\n-Build-Timestamp:2024-06-28T01:28:38Z\n-Built-By:exceptionfactory\n-Maven-Home:/home/exceptionfactory/.m2/wrapper/dists/apache-maven-3.9.8/af622e91\n+Build-Timestamp:2025-01-29T22:11:12Z\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:/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-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-41-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.9673471791434419%", "Differences: {\"'buildInfo'\": \"{'timestamp': 1738188672886, 'compiler': 'Ubuntu 21.0.4'}\",", " \"'bundles'\": \"{0: {'artifact': 'nifi-pgp-nar', 'componentManifest': {'controllerServices': [], \"", "              \"'processors': {0: {'artifact': 'nifi-pgp-nar', 'type': \"", "              \"'org.apache.nifi.processors.pgp.DecryptContentPGP', 'typeDescription': 'Decrypt \"", "              'contents of OpenPGP messages. Using the Packaged Decryption Strategy preserves '", "              \"OpenPGP encoding to support subsequent signature verifica [\u2026]"], "unified_diff": "@@ -1,501 +1,342 @@\n {\n     \"agentType\": \"nifi\",\n     \"buildInfo\": {\n-        \"compiler\": \"Azul Systems, Inc. 21.0.3\",\n+        \"compiler\": \"Ubuntu 21.0.4\",\n         \"revision\": \"19c5be0\",\n-        \"timestamp\": 1719538118956,\n+        \"timestamp\": 1738188672886,\n         \"version\": \"2.0.0-M4\"\n     },\n     \"bundles\": [\n         {\n-            \"artifact\": \"nifi-redis-nar\",\n+            \"artifact\": \"nifi-pgp-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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\": \"Cluster Max Redirects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communication Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout to use when attempting to communicate with Redis.\",\n-                                \"displayName\": \"Communication Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communication Timeout\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Connection String\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Index\",\n-                                \"required\": true,\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-                                \"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-                            \"Pool - Block When Exhausted\": {\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\": \"true\",\n-                                \"description\": \"Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.\",\n-                                \"displayName\": \"Pool - Block When Exhausted\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Block When Exhausted\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Idle\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.\",\n-                                \"displayName\": \"Pool - Max Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Max Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pool - Max Total\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.\",\n-                                \"displayName\": \"Pool - Max Total\",\n+                                \"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\": \"Pool - Max Total\",\n+                                \"name\": \"decryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Max Wait Time\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The amount of time to wait for an available connection when Block When Exhausted is set to true.\",\n-                                \"displayName\": \"Pool - Max Wait Time\",\n+                            \"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\": \"Pool - Max Wait Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"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\": \"Pool - Min Evictable Idle Time\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"private-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"version\": \"2.0.0-M4\"\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-                            \"Pool - Min Idle\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.\",\n-                                \"displayName\": \"Pool - Min Idle\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Min Idle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Filename from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Modified Date from decrypted Literal Data\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n-                            \"Pool - Test On Borrow\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon borrowing from the pool.\",\n-                                \"displayName\": \"Pool - Test On Borrow\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pool - Test On Borrow\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\n                             },\n-                            \"Pool - Test On Create\": {\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon creation.\",\n-                                \"displayName\": \"Pool - Test On Create\",\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\": \"Pool - Test On Create\",\n+                                \"name\": \"file-encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pool - Test On Return\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether or not connections should be tested upon returning to the pool.\",\n-                                \"displayName\": \"Pool - Test On Return\",\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\": \"Pool - Test On Return\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"passphrase\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Pool - Test While Idle\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"public-key-search\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"propertyDisplayName\": \"Public Key Service\",\n+                                        \"propertyName\": \"public-key-service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not connections should be tested while idle.\",\n-                                \"displayName\": \"Pool - Test While Idle\",\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\": \"Pool - Test While Idle\",\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-                            \"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+                            \"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\": \"Pool - Time Between Eviction Runs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"public-key-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Redis Mode\": {\n+                            \"symmetric-key-algorithm\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A single standalone Redis instance.\",\n-                                        \"displayName\": \"Standalone\",\n-                                        \"value\": \"Standalone\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_128\",\n+                                        \"value\": \"AES_128\"\n                                     },\n                                     {\n-                                        \"description\": \"Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel\",\n-                                        \"displayName\": \"Sentinel\",\n-                                        \"value\": \"Sentinel\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_192\",\n+                                        \"value\": \"AES_192\"\n                                     },\n                                     {\n-                                        \"description\": \"Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec\",\n-                                        \"displayName\": \"Cluster\",\n-                                        \"value\": \"Cluster\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AES_256\",\n+                                        \"value\": \"AES_256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standalone\",\n-                                \"description\": \"The type of Redis being communicated with - standalone, sentinel, or clustered.\",\n-                                \"displayName\": \"Redis Mode\",\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\": \"Redis Mode\",\n+                                \"name\": \"symmetric-key-algorithm\",\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-M4\"\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-                                \"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-                                \"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+                        \"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-redis-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Encryption Succeeded\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Encryption 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-                            \"cache\",\n-                            \"redis\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\"\n                         ],\n-                        \"type\": \"org.apache.nifi.redis.service.RedisConnectionPoolService\",\n-                        \"typeDescription\": \"A service that provides connections to Redis.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                        \"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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Symmetric-Key Algorithm\",\n+                                \"name\": \"pgp.symmetric.key.algorithm\"\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"2.0.0-M4\"\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-M4\"\n+                                \"description\": \"Symmetric-Key Algorithm Block Cipher\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.block.cipher\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"description\": \"Symmetric-Key Algorithm Key Size\",\n+                                \"name\": \"pgp.symmetric.key.algorithm.key.size\"\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"redis-connection-pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-redis-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n-                                    \"version\": \"2.0.0-M4\"\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-M4\"\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-                        \"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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-redis-nar\",\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -508,134 +349,196 @@\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"file-encoding\",\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+                            \"hash-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"SHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"SHA384\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA512\",\n+                                        \"value\": \"SHA512\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SHA512\",\n+                                \"description\": \"Hash Algorithm for signing\",\n+                                \"displayName\": \"Hash Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"data-record-path\",\n+                                \"name\": \"hash-algorithm\",\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+                            \"private-key-id\": {\n+                                \"description\": \"PGP Private Key Identifier formatted as uppercase hexadecimal string of 16 characters used for signing\",\n+                                \"displayName\": \"Private Key ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-value-record-path\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"private-key-id\",\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+                            \"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\": \"record-reader\",\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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"redis-connection-pool\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Redis Connection Pool\",\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\": \"redis-connection-pool\",\n+                                \"name\": \"signing-strategy\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n+                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles having all Records stored in Redis will be routed to this relationship\",\n+                                \"description\": \"Content signing succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles containing Records with processing errors will be routed to this relationship\",\n+                                \"description\": \"Content signing 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-                            \"hash\",\n-                            \"put\",\n-                            \"record\",\n-                            \"redis\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.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+                        \"type\": \"org.apache.nifi.processors.pgp.SignContentPGP\",\n+                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to Redis\",\n-                                \"name\": \"redis.success.record.count\"\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -648,658 +551,622 @@\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+                            \"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\": \"box-client-service\",\n+                                \"name\": \"public-key-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"Signature Verification Succeeded\",\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\": \"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-                            \"box\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"Encryption\",\n+                            \"GPG\",\n+                            \"OpenPGP\",\n+                            \"PGP\",\n+                            \"RFC 4880\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                        \"typeDescription\": \"Fetches files from a Box Folder. Designed to be used in tandem with ListBoxFile.\",\n+                        \"type\": \"org.apache.nifi.processors.pgp.VerifyContentPGP\",\n+                        \"typeDescription\": \"Verify signatures using OpenPGP Public Keys\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"box.id\"\n+                                \"description\": \"Filename from Literal Data\",\n+                                \"name\": \"pgp.literal.data.filename\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"Modified Date Time from Literal Data in milliseconds\",\n+                                \"name\": \"pgp.literal.data.modified\"\n                             },\n                             {\n-                                \"description\": \"The folder path where the file is located\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Signature Creation Time in milliseconds\",\n+                                \"name\": \"pgp.signature.created\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"box.size\"\n+                                \"description\": \"Signature Algorithm including key and hash algorithm names\",\n+                                \"name\": \"pgp.signature.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The last modified time of the file\",\n-                                \"name\": \"box.timestamp\"\n+                                \"description\": \"Signature Hash Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.hash.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The error code returned by Box\",\n-                                \"name\": \"error.code\"\n+                                \"description\": \"Signature Key Algorithm Identifier\",\n+                                \"name\": \"pgp.signature.key.algorithm.id\"\n                             },\n                             {\n-                                \"description\": \"The error message returned by Box\",\n-                                \"name\": \"error.message\"\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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-prometheus-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"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-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"prometheus-reporting-task-client-auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"Want Authentication\"\n+                                    },\n+                                    {\n+                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"Need Authentication\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"No Authentication\",\n+                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\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-M4\"\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+                            \"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\": \"box-folder-id\",\n+                                \"name\": \"prometheus-reporting-task-instance-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-                                            \"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+                            \"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\": \"et-initial-listing-target\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            }\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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"prometheus\",\n+                            \"record\",\n+                            \"send\",\n+                            \"write\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"60 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"prometheus-reporting-task-client-auth\": {\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\": \"ReportingTask will not authenticate clients. Anyone can communicate with this ReportingTask anonymously\",\n+                                        \"displayName\": \"No Authentication\",\n+                                        \"value\": \"No Authentication\"\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\": \"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\": \"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\": \"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\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing 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\": \"listing-strategy\",\n+                                \"name\": \"prometheus-reporting-task-client-auth\",\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+                            \"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\": \"min-age\",\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-                            \"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+                            \"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\": \"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-M4\"\n-                                }\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-                            \"recursive-search\": {\n+                            \"prometheus-reporting-task-metrics-send-jvm\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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+                                \"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\": \"recursive-search\",\n+                                \"name\": \"prometheus-reporting-task-metrics-send-jvm\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"prometheus-reporting-task-metrics-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Send rollup metrics for the entire root process group\",\n+                                        \"displayName\": \"Root Process Group\",\n+                                        \"value\": \"Root Process Group\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each process group\",\n+                                        \"displayName\": \"All Process Groups\",\n+                                        \"value\": \"All Process Groups\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Send metrics for each component in the system, to include processors, connections, controller services, etc.\",\n+                                        \"displayName\": \"All Components\",\n+                                        \"value\": \"All Components\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"All Components\",\n+                                \"description\": \"The granularity on which to report metrics. Options include only the root process group, all process groups, or all components\",\n+                                \"displayName\": \"Metrics Reporting Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"prometheus-reporting-task-metrics-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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.PutBoxFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"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-                            \"box\",\n-                            \"storage\"\n+                            \"metrics\",\n+                            \"prometheus\",\n+                            \"reporting\",\n+                            \"time series data\"\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-M4\",\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.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-M4\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-box-nar\",\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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\": \"20 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-                            \"box-client-service\": {\n-                                \"description\": \"Controller Service used to obtain a Box API connection.\",\n-                                \"displayName\": \"Box Client Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"box-client-service\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-box-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.box.controllerservices.BoxClientService\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"box-folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\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+                            \"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\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": 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-                            \"conflict-resolution-strategy\": {\n+                            \"zendesk-export-method\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"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\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\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-                                \"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+                                \"description\": \"Method for incremental export.\",\n+                                \"displayName\": \"Export Method\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"zendesk-export-method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-folder\": {\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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n+                                        \"displayName\": \"Tickets\",\n+                                        \"value\": \"/api/v2/incremental/tickets\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\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-                                        \"propertyDisplayName\": \"Subfolder Name\",\n-                                        \"propertyName\": \"subfolder-name\"\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-                                \"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+                                \"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\": \"create-folder\",\n+                                \"name\": \"zendesk-resource\",\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+                            \"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\": \"file-name\",\n+                                \"name\": \"zendesk-subdomain\",\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+                            \"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\": \"subfolder-name\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-user\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Box object.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n-                            \"org.apache.nifi.processors.box.ListBoxFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"Paging cursor for Zendesk API is stored. Cursor is updated after each successful request.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Box are transferred to this relationship.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\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+                            \"zendesk\"\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.zendesk.GetZendesk\",\n+                        \"typeDescription\": \"Incrementally fetches data from Zendesk API.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"The number of records fetched by the processor.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-aws-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-zendesk-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-services-nar\",\n+                        \"artifact\": \"nifi-zendesk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                            \"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@@ -1341,54 +1208,94 @@\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+                                \"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\": \"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+                                \"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\": \"zendesk-priority\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n+                            \"zendesk-record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"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-M4\"\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                                 \"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+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"zendesk-record-reader\"\n+                                    }\n+                                ],\n                                 \"description\": \"The content or the path to the type in the incoming record.\",\n                                 \"displayName\": \"Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"zendesk-type\",\n                                 \"required\": false,\n@@ -1401,52 +1308,74 @@\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+                        \"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-M4\"\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+                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\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+                            \"zendesk, ticket\"\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-M4\"\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-M4\",\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-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-groovyx-nar\",\n+            \"artifact\": \"nifi-language-translation-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-groovyx-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-language-translation-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1456,387 +1385,438 @@\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+                                \"description\": \"User-defined properties are used to translate arbitrary text based on attributes.\",\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+                                \"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_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"groovyx-additional-classpath\",\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-                            \"groovyx-failure-strategy\": {\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\": \"\",\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\": \"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\": \"groovyx-failure-strategy\",\n+                                \"name\": \"Translate Content\",\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+                            \"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\": \"groovyx-script-body\",\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-                                \"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+                                \"name\": \"Yandex API Key\",\n+                                \"required\": true,\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+                                \"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\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"groovyx\",\n-                            \"script\"\n+                            \"language\",\n+                            \"translate\",\n+                            \"translation\",\n+                            \"yandex\"\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.yandex.YandexTranslate\",\n+                        \"typeDescription\": \"Translates content and attributes from one language to another\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-jms-cf-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"artifact\": \"nifi-hashicorp-vault-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                                \"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\": \"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+                                \"name\": \"A Spring Vault configuration property name\",\n+                                \"value\": \"The property value\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"JMS SSL Context Service\",\n+                            \"configuration-strategy\": {\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+                                    },\n+                                    {\n+                                        \"description\": \"Use one or more '.properties' files to configure the client\",\n+                                        \"displayName\": \"Properties Files\",\n+                                        \"value\": \"properties-files\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"direct-properties\",\n+                                \"description\": \"Specifies the source of the configuration properties.\",\n+                                \"displayName\": \"Configuration Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"configuration-strategy\",\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+                            \"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+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n+                                \"displayName\": \"Vault Authentication\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"broker\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.authentication\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cf\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.connection.timeout\",\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+                            \"vault.properties.files\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"properties-files\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A comma-separated list of files containing HashiCorp Vault configuration properties, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration). All of the Spring property keys and authentication-specific property keys are supported.\",\n+                                \"displayName\": \"Vault Properties Files\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"cflib\",\n-                                \"required\": 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-                                        \"URL\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n+                            },\n+                            \"vault.read.timeout\": {\n+                                \"defaultValue\": \"15 sec\",\n+                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"vault.read.timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"vault.ssl.context.service\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections to the HashiCorp Vault server.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"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-M4\"\n+                                }\n+                            },\n+                            \"vault.uri\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"direct-properties\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Configuration Strategy\",\n+                                        \"propertyName\": \"configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The URI of the HashiCorp Vault server (e.g., http://localhost:8200).  Required if not specified in the Bootstrap HashiCorp Vault Configuration File.\",\n+                                \"displayName\": \"Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"vault.uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-jms-cf-service-nar\",\n+                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n                                 \"version\": \"2.0.0-M4\"\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+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"client\",\n+                            \"hashicorp\",\n+                            \"vault\"\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+                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n+                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                            \"kv-path\": {\n+                                \"defaultValue\": \"kv\",\n+                                \"description\": \"The HashiCorp Vault path to the Key/Value Version 1 Secrets Engine\",\n+                                \"displayName\": \"Key/Value Path\",\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\": \"kv-path\",\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+                            \"secret-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression indicating which Secrets to include as parameter groups to map to Parameter Contexts by name.\",\n+                                \"displayName\": \"Secret Name Pattern\",\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-name-pattern\",\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+                            \"vault-client-service\": {\n+                                \"description\": \"The service used to interact with HashiCorp Vault\",\n+                                \"displayName\": \"HashiCorp Vault Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"java.naming.security.credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"java.naming.security.principal\": {\n-                                \"description\": \"The Principal to use when authenticating with JNDI (java.naming.security.principal).\",\n-                                \"displayName\": \"JNDI Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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+                                \"name\": \"vault-client-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"integration\",\n-                            \"jms\",\n-                            \"jndi\",\n-                            \"messaging\",\n-                            \"publish\",\n-                            \"queue\",\n-                            \"subscribe\",\n-                            \"topic\"\n+                            \"hashicorp\",\n+                            \"secret\",\n+                            \"vault\"\n                         ],\n-                        \"type\": \"org.apache.nifi.jms.cf.JndiJmsConnectionFactoryProvider\",\n-                        \"typeDescription\": \"Provides a service to lookup an existing JMS ConnectionFactory using the Java Naming and Directory Interface (JNDI).\",\n+                        \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultParameterProvider\",\n+                        \"typeDescription\": \"Provides parameters from HashiCorp Vault Key/Value Version 1 Secrets.  Each Secret represents a parameter group, which will map to a Parameter Context.  The keys and values in the Secret map to Parameters.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -1844,525 +1824,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\": \"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_ALLOWED\",\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+                            \"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\": \"Acknowledgement Mode\",\n+                                \"name\": \"websocket-client-controller-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-websocket-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n                                     \"version\": \"2.0.0-M4\"\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-                            \"Destination Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"QUEUE\",\n-                                        \"value\": \"QUEUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOPIC\",\n-                                        \"value\": \"TOPIC\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"QUEUE\",\n-                                \"description\": \"The type of the JMS Destination. Could be one of 'QUEUE' or 'TOPIC'. Usually provided by the administrator. Defaults to 'QUEUE'\",\n-                                \"displayName\": \"Destination Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\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-                                \"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+                            \"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\": \"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-M4\"\n-                                }\n-                            },\n-                            \"Shared subscription\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://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+                                \"name\": \"websocket-client-id\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of successful connection\",\n+                                \"name\": \"success\"\n                             },\n-                            \"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+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\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+                                \"description\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\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+                                \"description\": \"FlowFile holding connection configuration attributes (like URL or HTTP headers) in case of connection failure\",\n+                                \"name\": \"failure\"\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+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\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+                            \"WebSocket\",\n+                            \"consume\",\n+                            \"listen\",\n+                            \"subscribe\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.websocket.ConnectWebSocket\",\n+                        \"typeDescription\": \"Acts as a WebSocket client endpoint to interact with a remote WebSocket server. FlowFiles are transferred to downstream relationships according to received message types as WebSocket client configured with this processor receives messages from remote WebSocket server. If a new flowfile is passed to the processor, the previous sessions will be closed and any data being sent will be aborted.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\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+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\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+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\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+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.local.address\"\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+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.remote.address\"\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+                            {\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"server-url-path\": {\n+                                \"description\": \"The WetSocket URL Path on which this processor listens to. Must starts with '/', e.g. '/example'.\",\n+                                \"displayName\": \"Server URL Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"server-url-path\",\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-                                \"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-M4\"\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"websocket-server-controller-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n-                            \"org.apache.nifi.jms.processors.PublishJMS\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The WebSocket text message output\",\n+                                \"name\": \"text message\"\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\": \"The WebSocket binary message output\",\n+                                \"name\": \"binary message\"\n+                            },\n+                            {\n+                                \"description\": \"The WebSocket session is established\",\n+                                \"name\": \"connected\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n+                            \"WebSocket\",\n                             \"consume\",\n-                            \"get\",\n-                            \"jms\",\n-                            \"message\",\n-                            \"receive\"\n+                            \"listen\",\n+                            \"subscribe\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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.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-M4\",\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+                                \"description\": \"WebSocket Controller Service id.\",\n+                                \"name\": \"websocket.controller.service.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSType from the message header.\",\n-                                \"name\": \"jms_type\"\n+                                \"description\": \"Established WebSocket session id.\",\n+                                \"name\": \"websocket.session.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSReplyTo from the message header.\",\n-                                \"name\": \"jms_replyTo\"\n+                                \"description\": \"WebSocket endpoint id.\",\n+                                \"name\": \"websocket.endpoint.id\"\n                             },\n                             {\n-                                \"description\": \"The JMSDestination from the message header.\",\n-                                \"name\": \"jms_destination\"\n+                                \"description\": \"WebSocket server address.\",\n+                                \"name\": \"websocket.local.address\"\n                             },\n                             {\n-                                \"description\": \"The JMS message type, can be TextMessage, BytesMessage, ObjectMessage, MapMessage or StreamMessage).\",\n-                                \"name\": \"jms.messagetype\"\n+                                \"description\": \"WebSocket client address.\",\n+                                \"name\": \"websocket.remote.address\"\n                             },\n                             {\n-                                \"description\": \"Each message property is written to an attribute.\",\n-                                \"name\": \"other attributes\"\n+                                \"description\": \"TEXT or BINARY.\",\n+                                \"name\": \"websocket.message.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jms-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -2370,1001 +2058,3370 @@\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_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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Factory Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Destination Name\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password used for authentication and authorization.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"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-M4\"\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n-                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"allow-illegal-chars-in-jms-header-names\",\n+                                \"name\": \"websocket-controller-service-id\",\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+                            \"websocket-endpoint-id\": {\n+                                \"defaultValue\": \"${websocket.endpoint.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the endpoint id of a WebSocket ControllerService.\",\n+                                \"displayName\": \"WebSocket Endpoint Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-endpoint-id\",\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-                            \"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+                            \"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\": \"character-set\",\n+                                \"name\": \"websocket-message-type\",\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-                            \"message-body-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"bytes\",\n-                                        \"value\": \"bytes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"bytes\",\n-                                \"description\": \"The type of JMS message body to construct.\",\n-                                \"displayName\": \"Message Body Type\",\n+                            \"websocket-session-id\": {\n+                                \"defaultValue\": \"${websocket.session.id}\",\n+                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n+                                \"displayName\": \"WebSocket Session Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-body-type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"websocket-session-id\",\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-                            \"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-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"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-M4\"\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-                            {\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+                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred 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+                                \"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-                        \"supportsDynamicProperties\": 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-                            \"jms\",\n-                            \"message\",\n+                            \"WebSocket\",\n                             \"publish\",\n-                            \"put\",\n                             \"send\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-record-serialization-services-nar\",\n+            \"artifact\": \"nifi-dropbox-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-lookup-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"schema-access-strategy\": {\n+                            \"CSV Format\": {\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\": \"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\": \"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\": \"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\": \"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\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\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+                                        \"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\": \"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+                                \"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\": \"schema-access-strategy\",\n+                                \"name\": \"CSV Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\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-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"schema-branch\",\n+                                \"name\": \"Comment Marker\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n+                            \"Escape Character\": {\n+                                \"defaultValue\": \"\\\\\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\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\": \"schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"Escape Character\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n+                            \"Quote Character\": {\n+                                \"defaultValue\": \"\\\"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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\": \"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\": \"schema-reference-reader\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Quote Character\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\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-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Quote Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\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-                                            \"schema-text-property\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\n                                     }\n                                 ],\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Trim Fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n+                            \"Value Separator\": {\n+                                \"defaultValue\": \",\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"custom\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"CSV Format\",\n+                                        \"propertyName\": \"CSV Format\"\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+                                \"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\": \"schema-version\",\n-                                \"required\": false,\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\": \"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\": \"ignore-duplicates\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\n                             }\n                         ],\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"comma\",\n-                            \"delimited\",\n-                            \"parse\",\n-                            \"reader\",\n+                            \"cache\",\n+                            \"csv\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"key\",\n+                            \"lookup\",\n                             \"record\",\n-                            \"row\",\n-                            \"separated\",\n-                            \"values\"\n+                            \"reloadable\",\n+                            \"value\"\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\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\": \"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.schemaregistry.services.SchemaReferenceWriter\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Schema Write Strategy\": {\n+                            \"character-encoding\": {\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\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Schema Write Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"compression-format\": {\n-                                \"allowableValues\": [\n-                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"BZIP2\",\n-                                        \"value\": \"BZIP2\"\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DEFLATE\",\n-                                        \"value\": \"DEFLATE\"\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SNAPPY\",\n-                                        \"value\": \"SNAPPY\"\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"LZO\",\n-                                        \"value\": \"LZO\"\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Compression type to use when writing Avro files. Default is None.\",\n-                                \"displayName\": \"Compression Format\",\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\": \"compression-format\",\n+                                \"name\": \"character-encoding\",\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+                            \"distributed-map-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"distributed-map-cache-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"encoder-pool-size\",\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.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"schema-access-strategy\": {\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"rest-lookup-authentication-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+                                        \"description\": \"No Authentication\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\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\": \"Basic Authentication\",\n+                                        \"displayName\": \"Basic\",\n+                                        \"value\": \"BASIC\"\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\": \"OAuth2 Authentication\",\n+                                        \"displayName\": \"OAuth2\",\n+                                        \"value\": \"OAUTH2\"\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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"rest-lookup-authentication-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"rest-lookup-basic-auth-password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-name\"\n+                                            \"BASIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-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\": \"The password to be used by the client to authenticate against the Remote URL.\",\n+                                \"displayName\": \"Basic Authentication Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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\": \"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-                            \"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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"rest-lookup-connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\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-                                            \"schema-name\"\n+                                            \"BASIC\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-digest-auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-reference-reader\": {\n+                            \"rest-lookup-oauth2-access-token-provider\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n+                                            \"OAUTH2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Authentication Strategy\",\n+                                        \"propertyName\": \"rest-lookup-authentication-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\": \"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\": \"schema-reference-reader\",\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.schemaregistry.services.SchemaReferenceReader\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"schema-registry\",\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+                                \"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\": \"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.schemaregistry.services.SchemaRegistry\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"dependencies\": [\n+                            \"rest-lookup-response-handling-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-text-property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\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-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"rest-lookup-response-handling-strategy\",\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+                            \"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\": \"rest-lookup-ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\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\": \"schema-version\",\n-                                \"required\": false,\n+                                \"name\": \"rest-lookup-url\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n                                 \"artifact\": \"nifi-standard-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"record\",\n-                            \"recordset\",\n-                            \"result\",\n-                            \"row\",\n-                            \"serializer\",\n-                            \"set\",\n-                            \"writer\"\n+                            \"http\",\n+                            \"json\",\n+                            \"lookup\",\n+                            \"rest\",\n+                            \"xml\"\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.lookup.RestLookupService\",\n+                        \"typeDescription\": \"Use a REST service to look up values.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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-                            \"accept-empty-extensions\": {\n+                            \"CSV Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\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+                                        \"description\": \"CSV data follows the RFC 4180 Specification defined at https://tools.ietf.org/html/rfc4180\",\n+                                        \"displayName\": \"RFC 4180\",\n+                                        \"value\": \"rfc-4180\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by Microsoft Excel\",\n+                                        \"displayName\": \"Microsoft Excel\",\n+                                        \"value\": \"excel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data is Tab-Delimited instead of Comma Delimited\",\n+                                        \"displayName\": \"Tab-Delimited\",\n+                                        \"value\": \"tdf\"\n+                                    },\n+                                    {\n+                                        \"description\": \"CSV data follows the format used by MySQL\",\n+                                        \"displayName\": \"MySQL Format\",\n+                                        \"value\": \"mysql\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command\",\n+                                        \"displayName\": \"Informix Unload\",\n+                                        \"value\": \"informix-unload\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n+                                        \"displayName\": \"Informix Unload Escape Disabled\",\n+                                        \"value\": \"informix-unload-csv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as custom format. Available for compatibility reasons.\",\n+                                        \"displayName\": \"Default Format\",\n+                                        \"value\": \"default\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n+                                        \"displayName\": \"RFC4180\",\n+                                        \"value\": \"RFC4180\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default\",\n+                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n+                                \"displayName\": \"CSV Format\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"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+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Quote Mode\",\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+                                \"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\": \"Trim Fields\",\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+                                \"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\": \"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\": \"ignore-duplicates\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-key-column\": {\n+                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n+                                \"displayName\": \"Lookup Key Column\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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+                        \"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-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\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.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbrecord-lookup-dbcp-service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n+                                    \"version\": \"2.0.0-M4\"\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.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                                \"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+                                \"sensitive\": false\n+                            },\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\": \"lookup-anonymous-ip\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-city\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies whether or not information about the geographic information, such as cities, corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup Geo Enrichment\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-city\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-connection-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Connection Type corresponding to the IP address should be returned. If true, the lookup will contain a 'connectionType' field that (if populated) will contain a value of 'Dialup', 'Cable/DSL', 'Corporate', or 'Cellular'\",\n+                                \"displayName\": \"Lookup Connection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-connection-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-domain\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Domain Name corresponding to the IP address should be returned. If true, the lookup will contain second-level domain information, such as foo.com but will not contain bar.foo.com\",\n+                                \"displayName\": \"Lookup Domain Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-domain\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"lookup-isp\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n+                                \"displayName\": \"Lookup ISP\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"lookup-isp\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-poi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-poi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protection Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Required Sheets\": {\n+                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n+                                \"displayName\": \"Required Sheets\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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\": \"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\": \"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+                                \"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-M4\"\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-M4\"\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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cell\",\n+                            \"excel\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"spreadsheet\",\n+                            \"values\",\n+                            \"xlsx\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-poi-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"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+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n+                                        \"displayName\": \"Unprotected\",\n+                                        \"value\": \"UNPROTECTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An Excel spreadsheet protected by a password\",\n+                                        \"displayName\": \"Password Protected\",\n+                                        \"value\": \"PASSWORD\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UNPROTECTED\",\n+                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n+                                \"displayName\": \"Protection Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protection Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The individual Excel 'segments' of the original Excel 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+                        \"tags\": [\n+                            \"split\",\n+                            \"text\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.excel.SplitExcel\",\n+                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent Excel FlowFile\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"sheetname\"\n+                            },\n+                            {\n+                                \"description\": \"The number of rows in the Excel sheet from the original spreadsheet.\",\n+                                \"name\": \"total.rows\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jolt-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                    {\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\": \"Custom Transformation Class Name\",\n+                                \"required\": false,\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+                                \"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+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Jolt Transform\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max String Length\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Pretty Print\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transform Cache Size\",\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), 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\": 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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Always set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                    {\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\": \"Custom Transformation Class Name\",\n+                                \"required\": false,\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+                                \"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+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Jolt Transform\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"jolt-record-record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jolt-record-record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"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+                            \"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.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-M4\",\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-M4\"\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\": \"19c5be0\"\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-record-serialization-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-access-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\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 FlowFile has the Avro Schema embedded within the content, and this schema will be used.\",\n+                                        \"displayName\": \"Use Embedded Avro Schema\",\n+                                        \"value\": \"embedded-avro-schema\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"embedded-avro-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"schema-branch\": {\n+                                \"dependencies\": [\n+                                    {\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-M4\"\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-M4\"\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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"comma\",\n+                            \"delimited\",\n+                            \"parse\",\n+                            \"reader\",\n+                            \"record\",\n+                            \"row\",\n+                            \"separated\",\n+                            \"values\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.avro.AvroReader\",\n+                        \"typeDescription\": \"Parses Avro data and returns each Avro record as an separate Record object. The Avro data may contain the schema itself, or the schema can be externalized and accessed by one of the methods offered by the 'Schema Access Strategy' property.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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\": \"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.schemaregistry.services.SchemaReferenceWriter\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Schema Write Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"cache-size\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Specifies how many Schemas should be cached\",\n+                                \"displayName\": \"Cache Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"compression-format\": {\n+                                \"allowableValues\": [\n+                                    {\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\": \"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-M4\"\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-M4\"\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-M4\"\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.RecordSetWriterFactory\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"avro\",\n+                            \"record\",\n+                            \"recordset\",\n+                            \"result\",\n+                            \"row\",\n+                            \"serializer\",\n+                            \"set\",\n+                            \"writer\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.avro.AvroRecordSetWriter\",\n+                        \"typeDescription\": \"Writes the contents of a RecordSet in Binary Avro format.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-record-serialization-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"accept-empty-extensions\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n@@ -4876,16 +6933,16 @@\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"Grok Expression\",\n                                 \"required\": true,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"TEXT\",\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@@ -4894,16 +6951,16 @@\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+                                        \"TEXT\",\n                                         \"URL\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n                             \"no-match-behavior\": {\n                                 \"allowableValues\": [\n@@ -7725,970 +9782,1290 @@\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-mongodb-nar\",\n+            \"artifact\": \"nifi-shopify-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-shopify-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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-                            \"Mongo Collection Name\": {\n-                                \"description\": \"The name of the collection to use\",\n-                                \"displayName\": \"Mongo Collection Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"CUSTOMERS\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DISCOUNTS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-delete-mode\": {\n+                            \"INVENTORY\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete only the first document that matches the query.\",\n-                                        \"displayName\": \"Delete One\",\n-                                        \"value\": \"one\"\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\": \"Delete every document that matches the query.\",\n-                                        \"displayName\": \"Delete Many\",\n-                                        \"value\": \"many\"\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\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n-                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n-                                        \"value\": \"attr\"\n+                                        \"description\": \"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-                                \"defaultValue\": \"one\",\n-                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n-                                \"displayName\": \"Delete Mode\",\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\": \"delete-mongo-delete-mode\",\n-                                \"required\": false,\n+                                \"name\": \"ONLINE_STORE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-mongo-fail-on-no-delete\": {\n+                            \"ORDERS\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail when no documents are deleted.\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\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\": \"Do not fail when nothing is deleted.\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\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-                                \"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+                                \"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\": \"delete-mongo-fail-on-no-delete\",\n-                                \"required\": false,\n+                                \"name\": \"ORDERS\",\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+                            \"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\": \"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-M4\"\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-                            {\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"name\": \"PRODUCT\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SALES_CHANNELS\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"STORE_PROPERTIES\",\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+                            \"access-token\": {\n+                                \"description\": \"Access Token to authenticate requests\",\n+                                \"displayName\": \"Access Token\",\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\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"api-version\": {\n+                                \"defaultValue\": \"2022-10\",\n+                                \"description\": \"The Shopify REST API version\",\n+                                \"displayName\": \"API Version\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Projection\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Query\",\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-                            \"Sort\": {\n-                                \"description\": \"The fields by which to sort; must be a valid BSON document\",\n-                                \"displayName\": \"Sort\",\n+                            \"incremental-initial-start-time\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\n+                                    }\n+                                ],\n+                                \"description\": \"This property specifies the start time when running the first request. Represents an ISO 8601-encoded date and time string. For example, 3:50 pm on September 7, 2019 in the time zone of UTC (Coordinated Universal Time) is represented as \\\"2019-09-07T15:50:00Z\\\".\",\n+                                \"displayName\": \"Incremental Initial Start Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Sort\",\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-                            \"get-mongo-send-empty\": {\n+                            \"is-incremental\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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\": \"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\": \"get-mongo-send-empty\",\n-                                \"required\": false,\n+                                \"name\": \"is-incremental\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n+                            \"object-category\": {\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\": \"Query a Customer resource\",\n+                                        \"displayName\": \"Customers\",\n+                                        \"value\": \"CUSTOMERS\"\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\": \"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-                                \"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+                                \"description\": \"Shopify object category\",\n+                                \"displayName\": \"Object Category\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n+                                \"name\": \"object-category\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\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-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n+                                \"name\": \"web-client-service-provider\",\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.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\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-                                \"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\": \"Choose whether or not to pretty print the JSON from the results of the query. Choosing 'True' can greatly increase the space requirements on disk depending on the complexity of the JSON document\",\n-                                \"displayName\": \"Pretty Print Results JSON\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-pretty-printing\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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\": \"All FlowFiles that have the results of a successful query execution go here.\",\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"get\",\n-                            \"mongodb\",\n-                            \"read\"\n+                            \"shopify\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mongodb.GetMongo\",\n-                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-zendesk-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-zendesk-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Batch Size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-expiration\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Limit\": {\n-                                \"description\": \"The maximum number of elements to return\",\n-                                \"displayName\": \"Limit\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Limit\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-size\",\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+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations.\",\n+                                \"displayName\": \"Web Client Service Provider\",\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\": \"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-M4\"\n+                                }\n                             },\n-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"zendesk-authentication-type-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Projection\": {\n-                                \"description\": \"The fields to be returned from the documents in the result set; must be a valid BSON document\",\n-                                \"displayName\": \"Projection\",\n+                            \"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\": \"Projection\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"required\": true,\n+                                \"sensitive\": true\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+                            \"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\": \"Query\",\n-                                \"required\": false,\n+                                \"name\": \"zendesk-comment-body\",\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+                            \"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\": \"Sort\",\n+                                \"name\": \"zendesk-priority\",\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+                            \"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\": \"get-mongo-record-writer-factory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subdomain\",\n                                 \"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-M4\"\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+                            \"zendesk-subject\": {\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\": \"mongo-client-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"zendesk-subject\",\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-M4\"\n-                                }\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+                            \"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\": \"mongo-query-attribute\",\n+                                \"name\": \"zendesk-type\",\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+                            \"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\": \"mongodb-schema-name\",\n+                                \"name\": \"zendesk-user\",\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-                            {\n-                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All input FlowFiles that are part of a successful query execution go here.\",\n-                                \"name\": \"original\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"get\",\n-                            \"json\",\n-                            \"mongo\",\n-                            \"mongodb\",\n-                            \"record\"\n+                            \"record\",\n+                            \"sink\",\n+                            \"zendesk\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-scripting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"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-                        \"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 data is encoded\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"insert\",\n-                                        \"value\": \"insert\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"update\",\n-                                        \"value\": \"update\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"insert\",\n-                                \"description\": \"Indicates whether the processor should insert or update content\",\n-                                \"displayName\": \"Mode\",\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\": \"Mode\",\n+                                \"name\": \"Script Engine\",\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+                            \"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\": \"Mongo Collection Name\",\n-                                \"required\": true,\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-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\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-                            \"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+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Query Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Upsert\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Upsert\",\n+                                \"name\": \"Script Engine\",\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+                            \"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-M4\"\n+                            },\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"mongo-client-service\",\n+                                \"name\": \"Script Body\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"put-mongo-update-mode\": {\n+                            \"Script Engine\": {\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+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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+                                \"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\": \"put-mongo-update-mode\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"putmongo-update-query\": {\n-                                \"description\": \"Specify a full MongoDB query to be used for the lookup query to do an update/upsert.\",\n-                                \"displayName\": \"Update Query\",\n+                            \"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\": \"putmongo-update-query\",\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-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"recordFactory\",\n+                            \"script\"\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-                        \"useCases\": [],\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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"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-                        \"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 data is encoded\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Engine\",\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+                            \"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\": \"Mongo Database Name\",\n-                                \"required\": true,\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-                            \"Ordered\": {\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\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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+                                \"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\": \"Ordered\",\n+                                \"name\": \"Script Engine\",\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+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Script File\",\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-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles that are written to MongoDB 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.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"bulk\",\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"update\",\n-                            \"write\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"record\",\n+                            \"record sink\",\n+                            \"script\"\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-                        \"useCases\": [],\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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -8696,217 +11073,147 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Script Engine Binding property\",\n+                                \"value\": \"Binding property value passed to Script Runner\"\n+                            }\n+                        ],\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\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+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Collection Name\",\n-                                \"required\": true,\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-                            \"Mongo Database Name\": {\n-                                \"description\": \"The name of the database to use\",\n-                                \"displayName\": \"Mongo Database Name\",\n+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Mongo Database Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"bypass-validation\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bypass-validation\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"insert_count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"ordered\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\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\": \"ordered\",\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+                                \"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\": \"record-reader\",\n+                                \"name\": \"Script Engine\",\n                                 \"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-M4\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-key-fields\",\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+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"update-mode\",\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-                        \"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+                        \"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\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n+                                \"description\": \"FlowFiles that were successfully processed\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"insert\",\n-                            \"mongodb\",\n-                            \"put\",\n-                            \"record\",\n-                            \"update\",\n-                            \"upsert\"\n+                            \"clojure\",\n+                            \"execute\",\n+                            \"groovy\",\n+                            \"script\"\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.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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -8914,205 +11221,131 @@\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-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The number of elements returned from the server in one batch.\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Batch Size\",\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-                            \"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-                            \"allow-disk-use\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Set this to true to enable writing data to temporary files to prevent exceeding the maximum memory use limit during aggregation pipeline staged when handling large datasets.\",\n-                                \"displayName\": \"Allow Disk Use\",\n+                            \"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\": \"allow-disk-use\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"json-type\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use MongoDB's \\\"extended JSON\\\". This is the JSON generated with toJson() on a MongoDB Document from the Java driver\",\n-                                        \"displayName\": \"Extended JSON\",\n-                                        \"value\": \"Extended\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generate a JSON document that conforms to typical JSON conventions instead of Mongo-specific conventions.\",\n-                                        \"displayName\": \"Standard JSON\",\n-                                        \"value\": \"Standard\"\n+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"json-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-agg-query\": {\n-                                \"description\": \"The aggregation query to be executed.\",\n-                                \"displayName\": \"Query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-agg-query\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"mongo-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"mongo-charset\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-client-service\": {\n-                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n-                                \"displayName\": \"Client Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-client-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n-                                    \"version\": \"2.0.0-M4\"\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-                                \"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+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"results-per-flowfile\",\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-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n-                                \"name\": \"results\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\n-                                \"name\": \"original\"\n-                            }\n+                        \"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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"aggregate\",\n-                            \"aggregation\",\n-                            \"mongo\"\n+                            \"groovy\",\n+                            \"invoke\",\n+                            \"script\"\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.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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -9120,276 +11353,184 @@\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-                            \"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+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\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-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\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-M4\"\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. 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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\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-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mongodb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"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+                            \"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\": \"gridfs-client-service\",\n+                                \"name\": \"Record Writer\",\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.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-operation-mode\": {\n+                            \"Script Engine\": {\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\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\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\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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\": \"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\": \"mongo-operation-mode\",\n+                                \"name\": \"Script Engine\",\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+                            \"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\": \"mongo-query-attribute\",\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-                        \"sideEffectFree\": false,\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\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\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\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\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\": \"The original input flowfile goes to this relationship if the query does not cause an error\",\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"gridfs\",\n-                            \"mongo\"\n+                            \"filter\",\n+                            \"groovy\",\n+                            \"record\",\n+                            \"script\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The custom metadata stored with a file is attached to this property if it exists.\",\n-                                \"name\": \"gridfs.file.metadata\"\n+                                \"description\": \"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-mongodb-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -9397,1419 +11538,973 @@\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-                            \"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+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-bucket-name\",\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-                            \"gridfs-client-service\": {\n-                                \"description\": \"The MongoDB client service to use for database connections.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"Record Reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gridfs-client-service\",\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-M4\"\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. 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 Writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gridfs-file-name\",\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-M4\"\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+                            \"Script Body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"putgridfs-chunk-size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"putgridfs-enforce-uniqueness\": {\n+                            \"Script Engine\": {\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\": \"\",\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n-                                        \"description\": \"Only the file hash must be unique.\",\n-                                        \"displayName\": \"Hash\",\n-                                        \"value\": \"hash\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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\": \"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\": \"putgridfs-enforce-uniqueness\",\n+                                \"name\": \"Script Engine\",\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+                            \"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\": \"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+                                \"name\": \"Script File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"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\": \"When the operation succeeds, the flowfile is sent 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 fail the duplicate check are sent to this relationship.\",\n-                                \"name\": \"duplicate\"\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\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n-                                \"name\": \"failure\"\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-                            \"file\",\n-                            \"gridfs\",\n-                            \"mongo\",\n-                            \"put\",\n-                            \"store\"\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.mongodb.gridfs.PutGridFS\",\n-                        \"typeDescription\": \"Writes a file to a GridFS bucket.\",\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-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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-                            \"Request Expiration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n-                                \"displayName\": \"Request Expiration\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request Expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\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-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"http\",\n-                            \"request\",\n-                            \"response\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n-                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-slack-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-slack-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"access-token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\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-                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.type\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"channel-id\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The number of records within the flow file.\",\n+                                \"name\": \"record.count\"\n                             },\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\": \"input-character-set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n+                                \"name\": \"record.error.message\"\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-M4\"\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-                            \"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-M4\"\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-M4\"\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_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+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\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. 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+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\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-                            \"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+                            \"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\": \"Batch Size\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"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\": \"Channels\",\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-M4\"\n+                                }\n                             },\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 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+                            \"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\": \"Include Message Blocks\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Include Null Fields\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Null Fields\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reply Monitor Frequency\",\n-                                \"required\": true,\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+                                \"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\": \"Reply Monitor Window\",\n+                                \"name\": \"Script Engine\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Script File\": {\n+                                \"description\": \"Path to script file to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script File\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Resolve Usernames\",\n-                                \"required\": true,\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.slack.ListenSlack\"\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\": 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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Slack messages that are successfully received will be routed to this relationship\",\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\": false,\n+                        \"supportsBatching\": true,\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+                            \"filter\",\n+                            \"groovy\",\n+                            \"modify\",\n+                            \"record\",\n+                            \"script\",\n+                            \"transform\",\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n-                                \"name\": \"slack.channel.id\"\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 slack messages that are included in the FlowFile\",\n-                                \"name\": \"slack.message.count\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\n-                                \"name\": \"mime.type\"\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-slack-nar\",\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_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+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n+                                \"requiredPermission\": \"execute code\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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+                            \"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\": \"App Token\",\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-M4\"\n+                                }\n                             },\n-                            \"Bot Token\": {\n-                                \"description\": \"The Bot Token that is registered to your Slack application\",\n-                                \"displayName\": \"Bot Token\",\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\": \"Bot Token\",\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-M4\"\n+                                }\n                             },\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+                            \"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\": \"Event Type to Receive\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Resolve User Details\": {\n+                            \"Script Engine\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Clojure\",\n+                                        \"value\": \"Clojure\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"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+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\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+                                \"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\": \"Resolve User Details\",\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.slack.ConsumeSlack\"\n+                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n+                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are created will be sent to this Relationship.\",\n-                                \"name\": \"success\"\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\": 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+                            \"groovy\",\n+                            \"record\",\n+                            \"script\",\n+                            \"validate\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\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+                ],\n+                \"reportingTasks\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-slack-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-scripting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"3 sec\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [\n+                        \"dynamicProperties\": [\n                             {\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+                                \"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-                        \"primaryNodeOnly\": false,\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-                            \"Access Token\": {\n-                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n-                                \"displayName\": \"Access Token\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Access Token\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Channel\": {\n-                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n-                                \"displayName\": \"Channel\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Send FlowFile Content as Message\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n-                                \"displayName\": \"Character Set\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Include FlowFile Content as Attachment\": {\n-                                \"allowableValues\": [\n-                                    {\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+                            \"Module Directory\": {\n+                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n+                                \"displayName\": \"Module Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include FlowFile Content as Attachment\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Text\",\n-                                \"required\": true,\n+                                \"name\": \"Script Body\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Publish Strategy\": {\n+                            \"Script Engine\": {\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+                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n+                                        \"displayName\": \"Groovy\",\n+                                        \"value\": \"Groovy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Send FlowFile Content as Message\",\n-                                \"description\": \"Specifies how the Processor will send the message or file to Slack.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                                \"defaultValue\": \"Groovy\",\n+                                \"description\": \"Language Engine for executing scripts\",\n+                                \"displayName\": \"Script Engine\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Publish Strategy\",\n+                                \"name\": \"Script Engine\",\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+                            \"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\": \"Thread Timestamp\",\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-                        \"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 success after being successfully sent to Slack\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 'failure' if unable to be sent to Slack for any other reason\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to 'rate limited' if the Rate Limit has been exceeded\",\n-                                \"name\": \"rate limited\"\n-                            }\n-                        ],\n+                        \"restricted\": true,\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\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+                            \"execute\",\n+                            \"groovy\",\n+                            \"reporting\",\n+                            \"script\"\n                         ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n-                                \"name\": \"slack.channel.id\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the slack messages that was sent; this is used by Slack as a unique identifier\",\n-                                \"name\": \"slack.ts\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.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-M4\"\n                     }\n-                ],\n-                \"reportingTasks\": []\n+                ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"artifact\": \"nifi-smb-client-api-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"artifact\": \"nifi-framework-kubernetes-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-record-sink-service-nar\",\n+            \"artifact\": \"nifi-email-nar\",\n             \"componentManifest\": {\n-                \"controllerServices\": [\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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+                            \"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\": \"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-M4\"\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+                                \"name\": \"Mark Messages as Read\",\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+                            \"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\": \"smtp-hostname\",\n+                                \"name\": \"Use SSL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-password\": {\n-                                \"dependencies\": [\n+                            \"authorization-mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\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-                                \"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-                                \"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+                                \"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\": \"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\": \"authorization-mode\",\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+                            \"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\": \"smtp-starttls\",\n+                                \"name\": \"connection.timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smtp-username\": {\n-                                \"dependencies\": [\n+                            \"delete.messages\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SMTP Auth\",\n-                                        \"propertyName\": \"smtp-auth\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Username for the SMTP account\",\n-                                \"displayName\": \"SMTP Username\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specify whether mail messages should be deleted after retrieval.\",\n+                                \"displayName\": \"Delete Messages\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"smtp-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete.messages\",\n+                                \"required\": true,\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+                            \"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\": \"smtp-xmailer-header\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"subject\": {\n-                                \"defaultValue\": \"Message from NiFi\",\n-                                \"description\": \"The email subject\",\n-                                \"displayName\": \"Subject\",\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\": \"subject\",\n+                                \"name\": \"folder\",\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+                            \"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\": \"to\",\n-                                \"required\": false,\n+                                \"name\": \"host\",\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"logsink-log-level\": {\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+                            \"oauth2-access-token-provider\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"dependentValues\": [\n+                                            \"oauth-based-authorization-mode\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\n                                     }\n                                 ],\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\": \"logsink-log-level\",\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+                                \"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\": \"record-sink-record-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"hostname\": {\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\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\": \"hostname\",\n+                                \"name\": \"password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n                             \"port\": {\n-                                \"description\": \"Destination port number\",\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-                            \"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-M4\"\n-                                }\n-                            },\n-                            \"sender-threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of worker threads allocated for handling socket communication\",\n-                                \"displayName\": \"Sender Threads\",\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\": \"sender-threads\",\n+                                \"name\": \"user\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\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-                            \"UDP\",\n-                            \"event\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"Consume\",\n+                            \"Email\",\n+                            \"Get\",\n+                            \"Imap\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Message\"\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+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-record-sink-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cipher-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -10818,278 +12513,207 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"cipher-algorithm-mode\": {\n+                            \"authorization-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+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\n                                     },\n                                     {\n-                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n-                                        \"displayName\": \"GCM\",\n-                                        \"value\": \"GCM\"\n+                                        \"description\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\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+                                \"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\": \"cipher-algorithm-mode\",\n+                                \"name\": \"authorization-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"cipher-algorithm-padding\": {\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\": \"NoPadding\",\n-                                        \"displayName\": \"NoPadding\",\n-                                        \"value\": \"NoPadding\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"PKCS5Padding\",\n-                                        \"displayName\": \"PKCS5Padding\",\n-                                        \"value\": \"PKCS5Padding\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"cipher-algorithm-padding\",\n+                                \"name\": \"delete.messages\",\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+                            \"fetch.size\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Specify the maximum number of Messages to fetch per call to Email Server.\",\n+                                \"displayName\": \"Fetch Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"fetch.size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"key-specification-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n-                                        \"displayName\": \"PASSWORD\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PASSWORD\",\n-                                \"description\": \"Format describing the configured Key Specification\",\n-                                \"displayName\": \"Key Specification Format\",\n+                            \"folder\": {\n+                                \"defaultValue\": \"INBOX\",\n+                                \"description\": \"Email folder to retrieve messages from (e.g., INBOX)\",\n+                                \"displayName\": \"Folder\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-specification-format\",\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-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Decryption failed\",\n-                                \"name\": \"failure\"\n                             },\n-                            {\n-                                \"description\": \"Decryption succeeded\",\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-                        ],\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cipher-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"Private Key Identities\": {\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-                                            \"PROPERTIES\"\n+                                            \"oauth-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\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+                                \"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\": \"Private Key Identities\",\n+                                \"name\": \"oauth2-access-token-provider\",\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.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Private Key Identity Resources\": {\n+                            \"password\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RESOURCES\"\n+                                            \"password-based-authorization-mode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Private Key Source\",\n-                                        \"propertyName\": \"Private Key Source\"\n+                                        \"propertyDisplayName\": \"Authorization Mode\",\n+                                        \"propertyName\": \"authorization-mode\"\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+                                \"description\": \"Password used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Identity Resources\",\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-                                \"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+                            \"user\": {\n+                                \"description\": \"User Name used for authentication and authorization with Email server.\",\n+                                \"displayName\": \"User Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Private Key Source\",\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Failed\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Decryption Completed\",\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\": 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+                            \"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.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.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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11101,213 +12725,70 @@\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-                            \"encryption-scheme\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHMD5AND192BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHMD5AND256BITAES-CBC-OPENSSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with MD5 digest and Data Encryption Standard 64 bit keys. OID 1.2.840.113549.1.5.3\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_DES\",\n-                                        \"value\": \"PBEWITHMD5ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS Scheme 1 with MD5 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.6\",\n-                                        \"displayName\": \"PBE_WITH_MD5_AND_RC2\",\n-                                        \"value\": \"PBEWITHMD5ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHAAND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHAAND256BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Data Encryption Standard. OID 1.2.840.113549.1.5.10\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DES\",\n-                                        \"value\": \"PBEWITHSHA1ANDDES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 128 bit keys. OID 1.2.840.113549.1.12.1.4\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_128\",\n-                                        \"value\": \"PBEWITHSHAAND2-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Triple Data Encryption Standard 192 bit keys. OID 1.2.840.113549.1.12.1.3\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_DESEDE_192\",\n-                                        \"value\": \"PBEWITHSHAAND3-KEYTRIPLEDES-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS5 Scheme 1 with SHA-1 digest and Rivest Cipher 2. OID 1.2.840.113549.1.5.11\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2\",\n-                                        \"value\": \"PBEWITHSHA1ANDRC2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 128 bit keys. OID 1.2.840.113549.1.12.1.5\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 2 40 bit keys. OID 1.2.840.113549.1.12.1.6\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC2_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC2-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 128 bit keys. OID 1.2.840.113549.1.12.1.1\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_128\",\n-                                        \"value\": \"PBEWITHSHAAND128BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Rivest Cipher 4 40 bit keys. OID 1.2.840.113549.1.12.1.2\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_RC4_40\",\n-                                        \"value\": \"PBEWITHSHAAND40BITRC4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-1 digest and Twofish in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA1_AND_TWOFISH\",\n-                                        \"value\": \"PBEWITHSHAANDTWOFISH-CBC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_128\",\n-                                        \"value\": \"PBEWITHSHA256AND128BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 192 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_192\",\n-                                        \"value\": \"PBEWITHSHA256AND192BITAES-CBC-BC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"PKCS12 with SHA-256 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 256 bit keys.\",\n-                                        \"displayName\": \"PBE_WITH_SHA256_AND_AES_CBC_256\",\n-                                        \"value\": \"PBEWITHSHA256AND256BITAES-CBC-BC\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n-                                \"displayName\": \"Encryption Scheme\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"encryption-scheme\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"key-derivation-strategy\": {\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-                                    },\n-                                    {\n-                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n-                                        \"displayName\": \"JASYPT_STANDARD\",\n-                                        \"value\": \"JASYPT_STANDARD\"\n-                                    }\n-                                ],\n-                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n-                                \"displayName\": \"Key Derivation Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-derivation-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            }\n-                        },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption failed\",\n+                                \"description\": \"The original file\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that could not be parsed\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Decryption succeeded\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\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+                            \"email\",\n+                            \"split\"\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.email.ExtractEmailAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Password-Based Encryption Scheme\",\n-                                \"name\": \"pbe.scheme\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"Password-Based Encryption Block Cipher\",\n-                                \"name\": \"pbe.symmetric.cipher\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n-                                \"name\": \"pbe.digest.algorithm\"\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-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11320,152 +12801,121 @@\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\": \"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+                            \"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\": \"Public Key Recipient Resources\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"URL\"\n-                                    ]\n-                                },\n+                                \"name\": \"CAPTURED_HEADERS\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Public Key Recipients\",\n-                                \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\"\n-                                    ]\n-                                },\n-                                \"sensitive\": true\n-                            },\n-                            \"Public Key Source\": {\n+                            \"STRICT_ADDRESS_PARSING\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Load one or more keys from configured properties\",\n-                                        \"displayName\": \"PROPERTIES\",\n-                                        \"value\": \"PROPERTIES\"\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\": \"Load one or more keys from files or URLs\",\n-                                        \"displayName\": \"RESOURCES\",\n-                                        \"value\": \"RESOURCES\"\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\": \"PROPERTIES\",\n-                                \"description\": \"Source of information determines the loading strategy for X25519 Public Key Recipients\",\n-                                \"displayName\": \"Public Key Source\",\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\": \"Public Key Source\",\n-                                \"required\": true,\n+                                \"name\": \"STRICT_ADDRESS_PARSING\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Encryption Failed\",\n+                                \"description\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Encryption Completed\",\n+                                \"description\": \"Extraction was successful\",\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-                            \"ChaCha20-Poly1305\",\n-                            \"X25519\",\n-                            \"age\",\n-                            \"age-encryption.org\",\n-                            \"encryption\"\n+                            \"email\",\n+                            \"split\"\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+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-cipher-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -11477,1009 +12927,431 @@\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-                            \"mac-algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA256\",\n-                                        \"value\": \"HmacSHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HmacSHA512\",\n-                                        \"value\": \"HmacSHA512\"\n-                                    }\n-                                ],\n-                                \"description\": \"Hashed Message Authentication Code Function\",\n-                                \"displayName\": \"Message Authentication Code Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mac-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-authentication-code\": {\n-                                \"description\": \"The MAC to compare with the calculated value\",\n-                                \"displayName\": \"Message Authentication Code\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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\": \"message-authentication-code-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"secret-key\": {\n-                                \"description\": \"Secret key to calculate the hash\",\n-                                \"displayName\": \"Secret Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"secret-key-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF8\",\n-                                        \"value\": \"UTF8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HEXADECIMAL\",\n-                                        \"value\": \"HEXADECIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BASE64\",\n-                                        \"value\": \"BASE64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"HEXADECIMAL\",\n-                                \"description\": \"Encoding of the Secret Key\",\n-                                \"displayName\": \"Secret Key Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-key-encoding\",\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\": \"Each original flowfile (i.e. before extraction) will be routed to the original relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Signature Verification Failed\",\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 individual attachment will be routed to the attachments relationship\",\n+                                \"name\": \"attachments\"\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+                            \"email\",\n+                            \"split\"\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.email.ExtractTNEFAttachments\",\n+                        \"typeDescription\": \"Extract attachments from a mime formatted email file, splitting them into individual flowfiles.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n-                                \"name\": \"mac.calculated\"\n+                                \"description\": \"The filename of the attachment\",\n+                                \"name\": \"filename \"\n                             },\n                             {\n-                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n-                                \"name\": \"mac.encoding\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"email.tnef.attachment.parent.filename \"\n                             },\n                             {\n-                                \"description\": \"Hashed Message Authentication Code Algorithm\",\n-                                \"name\": \"mac.algorithm\"\n+                                \"description\": \"The UUID of the original FlowFile.\",\n+                                \"name\": \"email.tnef.attachment.parent.uuid\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-file-resource-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-file-resource-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                                \"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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"artifact\": \"nifi-email-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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-M4\"\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-                            \"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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\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-M4\"\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-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\",\n-                            \"map\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n-                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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-clustering-strategy\": {\n+                            \"CLIENT_AUTH\": {\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+                                        \"description\": \"\",\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    }\n+                                ],\n+                                \"dependencies\": [\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+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL_CONTEXT_SERVICE\"\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-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"hazelcast\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n-                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hazelcast-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"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\": \"hazelcast-retry-backoff-maximum\",\n+                                \"name\": \"CLIENT_AUTH\",\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+                            \"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\": \"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-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-proxy-configuration-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-proxy-configuration-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"proxy-server-host\": {\n-                                \"description\": \"Proxy server hostname or ip-address.\",\n-                                \"displayName\": \"Proxy Server Host\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-host\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-server-port\": {\n-                                \"description\": \"Proxy server port number.\",\n-                                \"displayName\": \"Proxy Server Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"proxy-server-port\",\n+                                \"name\": \"SMTP_HOSTNAME\",\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.\",\n-                                \"displayName\": \"Proxy Type\",\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\": \"proxy-type\",\n+                                \"name\": \"SMTP_MAXIMUM_CONNECTIONS\",\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-                                \"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-                                \"sensitive\": false\n-                            },\n-                            \"proxy-user-password\": {\n-                                \"description\": \"The password of the proxy client for user authentication.\",\n-                                \"displayName\": \"Proxy User Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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\": \"socks-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.proxy.ProxyConfigurationService\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-web-client-provider-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"connect-timeout\",\n+                                \"name\": \"SMTP_MAXIMUM_MSG_SIZE\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component.\",\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-M4\"\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+                            \"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\": \"read-timeout\",\n+                                \"name\": \"SMTP_PORT\",\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+                            \"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\": \"redirect-handling-strategy\",\n+                                \"name\": \"SMTP_TIMEOUT\",\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+                            \"SSL_CONTEXT_SERVICE\": {\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"name\": \"SSL_CONTEXT_SERVICE\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n-                                \"version\": \"2.0.0-M4\"\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-                            \"Client\",\n-                            \"HTTP\",\n-                            \"Web\"\n+                            \"email\",\n+                            \"listen\",\n+                            \"smtp\"\n                         ],\n-                        \"type\": \"org.apache.nifi.web.client.provider.service.StandardWebClientServiceProvider\",\n-                        \"typeDescription\": \"Web Client Service Provider with support for configuring standard HTTP connection properties\",\n-                        \"version\": \"2.0.0-M4\"\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-M4\",\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-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-mqtt-nar\",\n+            \"artifact\": \"nifi-splunk-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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                         \"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+                            \"Application\": {\n+                                \"description\": \"The Splunk Application to query.\",\n+                                \"displayName\": \"Application\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Client ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Application\",\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+                            \"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 (seconds)\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Group ID\": {\n-                                \"description\": \"MQTT consumer group ID to use. If group ID not set, client will connect as individual consumer.\",\n-                                \"displayName\": \"Group ID\",\n+                            \"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\": \"Group ID\",\n+                                \"name\": \"Earliest Time\",\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+                            \"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\": \"Keep Alive Interval (seconds)\",\n-                                \"required\": false,\n+                                \"name\": \"Hostname\",\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+                            \"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\": \"Last Will Message\",\n+                                \"name\": \"Latest Time\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Last Will QoS Level\": {\n+                            \"Output Mode\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"ATOM\",\n+                                        \"value\": \"ATOM\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"CSV\",\n+                                        \"value\": \"CSV\"\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will QoS Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n-                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"JSON\",\n+                                        \"value\": \"JSON\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Start with v3.1.1 and fallback to v3.1.0 if not supported by a broker\",\n-                                        \"displayName\": \"v3 AUTO\",\n-                                        \"value\": \"0\"\n+                                        \"displayName\": \"JSON_COLS\",\n+                                        \"value\": \"JSON_COLS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"JSON_ROWS\",\n+                                        \"value\": \"JSON_ROWS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"XML\",\n+                                        \"value\": \"XML\"\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\": \"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\": \"MQTT Specification Version\",\n+                                \"name\": \"Output Mode\",\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+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Queue Size\",\n-                                \"required\": true,\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"Password\": {\n-                                \"description\": \"Password to use when connecting to the broker\",\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-                            \"Quality of Service(QoS)\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Best effort delivery. A message won\\u2019t be acknowledged by the receiver or stored and redelivered by the sender. This is often called \\u201cfire and forget\\u201d and provides the same guarantee as the underlying TCP protocol.\",\n-                                        \"displayName\": \"0 - At most once\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that a message will be delivered at least once to the receiver. The message can also be delivered more than once\",\n-                                        \"displayName\": \"1 - At least once\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Guarantees that each message is received only once by the counterpart. It is the safest and also the slowest quality of service level. The guarantee is provided by two round-trip flows between sender and receiver.\",\n-                                        \"displayName\": \"2 - Exactly once\",\n-                                        \"value\": \"2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The Quality of Service (QoS) to receive the message with. Accepts values '0', '1' or '2'; '0' for 'at most once', '1' for 'at least once', '2' for 'exactly once'.\",\n-                                \"displayName\": \"Quality of Service (QoS)\",\n+                            \"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\": \"Quality of Service(QoS)\",\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@@ -12488,4280 +13360,3361 @@\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-M4\"\n                                 }\n                             },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                            \"Scheme\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\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\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n-                                \"required\": false,\n+                                \"name\": \"Scheme\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Session state\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"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\": \"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\": \"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\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic Filter\": {\n-                                \"description\": \"The MQTT topic filter to designate the topics to subscribe to.\",\n-                                \"displayName\": \"Topic Filter\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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 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+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"add-attributes-as-fields\": {\n+                            \"Time Field Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Search based on the time of the event which may be different than when the event was indexed.\",\n+                                        \"displayName\": \"Event Time\",\n+                                        \"value\": \"Event Time\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n+                                        \"displayName\": \"Index Time\",\n+                                        \"value\": \"Index Time\"\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\": \"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\": \"add-attributes-as-fields\",\n+                                \"name\": \"Time Field Strategy\",\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-                                \"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-M4\"\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+                            \"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\": \"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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n-                            },\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-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT broker that was the message source\",\n-                                \"name\": \"mqtt.broker\"\n-                            },\n-                            {\n-                                \"description\": \"MQTT topic on which message was received\",\n-                                \"name\": \"mqtt.topic\"\n-                            },\n-                            {\n-                                \"description\": \"The quality of service for this message.\",\n-                                \"name\": \"mqtt.qos\"\n-                            },\n-                            {\n-                                \"description\": \"Whether or not this message might be a duplicate of one which has already been received.\",\n-                                \"name\": \"mqtt.isDuplicate\"\n+                                \"name\": \"Time Range Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Whether or not this message was from a current publisher, or was \\\"retained\\\" by the server as the last message published on the topic.\",\n-                                \"name\": \"mqtt.isRetained\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mqtt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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+                            \"Time Zone\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Abidjan\",\n+                                        \"value\": \"Africa/Abidjan\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Accra\",\n+                                        \"value\": \"Africa/Accra\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Addis_Ababa\",\n+                                        \"value\": \"Africa/Addis_Ababa\"\n+                                    },\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\": \"Last Will QoS Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Retain\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Algiers\",\n+                                        \"value\": \"Africa/Algiers\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Asmara\",\n+                                        \"value\": \"Africa/Asmara\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Asmera\",\n+                                        \"value\": \"Africa/Asmera\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the client's Last Will.\",\n-                                \"displayName\": \"Last Will Retain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Retain\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Will Topic\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bamako\",\n+                                        \"value\": \"Africa/Bamako\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Last Will Message\",\n-                                        \"propertyName\": \"Last Will Message\"\n-                                    }\n-                                ],\n-                                \"description\": \"The topic to send the client's Last Will to.\",\n-                                \"displayName\": \"Last Will Topic\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Last Will Topic\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"MQTT Specification Version\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bangui\",\n+                                        \"value\": \"Africa/Bangui\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Banjul\",\n+                                        \"value\": \"Africa/Banjul\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v5.0\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"Africa/Bissau\",\n+                                        \"value\": \"Africa/Bissau\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.1\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"Africa/Blantyre\",\n+                                        \"value\": \"Africa/Blantyre\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"v3.1.0\",\n-                                        \"value\": \"3\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The MQTT specification version when connecting with the broker. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"MQTT Specification Version\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"MQTT Specification Version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"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-                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Quality of Service(QoS)\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Retain Message\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Session Expiry Interval\": {\n-                                \"defaultValue\": \"24 hrs\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"Africa/Brazzaville\",\n+                                        \"value\": \"Africa/Brazzaville\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"false\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Session state\",\n-                                        \"propertyName\": \"Session state\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Bujumbura\",\n+                                        \"value\": \"Africa/Bujumbura\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"5\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n-                                        \"propertyName\": \"MQTT Specification Version\"\n-                                    }\n-                                ],\n-                                \"description\": \"After this interval the broker will expire the client and clear the session state.\",\n-                                \"displayName\": \"Session Expiry Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session Expiry Interval\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Session state\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Cairo\",\n+                                        \"value\": \"Africa/Cairo\"\n+                                    },\n                                     {\n-                                        \"description\": \"Client and Server discard any previous session and start a new one. This session lasts as long as the network connection. State data associated with this session is not reused in any subsequent session\",\n-                                        \"displayName\": \"Clean Session\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Casablanca\",\n+                                        \"value\": \"Africa/Casablanca\"\n                                     },\n                                     {\n-                                        \"description\": \"Server resumes communications with the client based on state from the current session (as identified by the ClientID). The client and server store the session after the client and server are disconnected. After the disconnection of a session that was not a clean session, the server stores further QoS 1 and QoS 2 messages that match any subscriptions that the client had at the time of disconnection as part of the session state\",\n-                                        \"displayName\": \"Resume Session\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether to start a fresh or resume previous flows. See the allowable value descriptions for more details.\",\n-                                \"displayName\": \"Session state\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Session state\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Topic\": {\n-                                \"description\": \"The topic to publish the message to.\",\n-                                \"displayName\": \"Topic\",\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-                            \"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-                            \"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\": \"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 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-M4\"\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-                                \"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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"IOT\",\n-                            \"MQTT\",\n-                            \"publish\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.mqtt.PublishMQTT\",\n-                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"domain\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"enable-dfs\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ceuta\",\n+                                        \"value\": \"Africa/Ceuta\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Conakry\",\n+                                        \"value\": \"Africa/Conakry\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"enable-dfs\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hostname\": {\n-                                \"description\": \"The network host of the SMB file server.\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hostname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"description\": \"The password used for authentication.\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"port\": {\n-                                \"defaultValue\": \"445\",\n-                                \"description\": \"Port to use for connection.\",\n-                                \"displayName\": \"Port\",\n-                                \"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+                                        \"displayName\": \"Africa/Dakar\",\n+                                        \"value\": \"Africa/Dakar\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AUTO\",\n-                                        \"value\": \"AUTO\"\n+                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n+                                        \"value\": \"Africa/Dar_es_Salaam\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.0.2\",\n-                                        \"value\": \"SMB_2_0_2\"\n+                                        \"displayName\": \"Africa/Djibouti\",\n+                                        \"value\": \"Africa/Djibouti\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 2.1\",\n-                                        \"value\": \"SMB_2_1\"\n+                                        \"displayName\": \"Africa/Douala\",\n+                                        \"value\": \"Africa/Douala\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0\",\n-                                        \"value\": \"SMB_3_0\"\n+                                        \"displayName\": \"Africa/El_Aaiun\",\n+                                        \"value\": \"Africa/El_Aaiun\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.0.2\",\n-                                        \"value\": \"SMB_3_0_2\"\n+                                        \"displayName\": \"Africa/Freetown\",\n+                                        \"value\": \"Africa/Freetown\"\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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"Africa/Gaborone\",\n+                                        \"value\": \"Africa/Gaborone\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Harare\",\n+                                        \"value\": \"Africa/Harare\"\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hl7-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"displayName\": \"Africa/Johannesburg\",\n+                                        \"value\": \"Africa/Johannesburg\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"autodetect\",\n-                                        \"value\": \"autodetect\"\n+                                        \"displayName\": \"Africa/Juba\",\n+                                        \"value\": \"Africa/Juba\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.2\",\n-                                        \"value\": \"2.2\"\n+                                        \"displayName\": \"Africa/Kampala\",\n+                                        \"value\": \"Africa/Kampala\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3\",\n-                                        \"value\": \"2.3\"\n+                                        \"displayName\": \"Africa/Khartoum\",\n+                                        \"value\": \"Africa/Khartoum\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.3.1\",\n-                                        \"value\": \"2.3.1\"\n+                                        \"displayName\": \"Africa/Kigali\",\n+                                        \"value\": \"Africa/Kigali\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.4\",\n-                                        \"value\": \"2.4\"\n+                                        \"displayName\": \"Africa/Kinshasa\",\n+                                        \"value\": \"Africa/Kinshasa\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5\",\n-                                        \"value\": \"2.5\"\n+                                        \"displayName\": \"Africa/Lagos\",\n+                                        \"value\": \"Africa/Lagos\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2.5.1\",\n-                                        \"value\": \"2.5.1\"\n+                                        \"displayName\": \"Africa/Libreville\",\n+                                        \"value\": \"Africa/Libreville\"\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+                                        \"displayName\": \"Africa/Lome\",\n+                                        \"value\": \"Africa/Lome\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Luanda\",\n+                                        \"value\": \"Africa/Luanda\"\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+                                        \"displayName\": \"Africa/Lubumbashi\",\n+                                        \"value\": \"Africa/Lubumbashi\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Lusaka\",\n+                                        \"value\": \"Africa/Lusaka\"\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+                                        \"displayName\": \"Africa/Malabo\",\n+                                        \"value\": \"Africa/Malabo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Maputo\",\n+                                        \"value\": \"Africa/Maputo\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-hl7-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-apicurio-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-apicurio-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-M4\"\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-box-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-email-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"displayName\": \"Africa/Maseru\",\n+                                        \"value\": \"Africa/Maseru\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Mbabane\",\n+                                        \"value\": \"Africa/Mbabane\"\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+                                        \"displayName\": \"Africa/Mogadishu\",\n+                                        \"value\": \"Africa/Mogadishu\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Monrovia\",\n+                                        \"value\": \"Africa/Monrovia\"\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+                                        \"displayName\": \"Africa/Nairobi\",\n+                                        \"value\": \"Africa/Nairobi\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Ndjamena\",\n+                                        \"value\": \"Africa/Ndjamena\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Niamey\",\n+                                        \"value\": \"Africa/Niamey\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Nouakchott\",\n+                                        \"value\": \"Africa/Nouakchott\"\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+                                        \"displayName\": \"Africa/Ouagadougou\",\n+                                        \"value\": \"Africa/Ouagadougou\"\n+                                    },\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-M4\"\n-                                }\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Porto-Novo\",\n+                                        \"value\": \"Africa/Porto-Novo\"\n+                                    },\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Sao_Tome\",\n+                                        \"value\": \"Africa/Sao_Tome\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Timbuktu\",\n+                                        \"value\": \"Africa/Timbuktu\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Africa/Tripoli\",\n+                                        \"value\": \"Africa/Tripoli\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Africa/Tunis\",\n+                                        \"value\": \"Africa/Tunis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"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+                                        \"displayName\": \"Africa/Windhoek\",\n+                                        \"value\": \"Africa/Windhoek\"\n+                                    },\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-M4\"\n-                                }\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Adak\",\n+                                        \"value\": \"America/Adak\"\n+                                    },\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-email-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"The original file\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that could not be parsed\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Each individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anchorage\",\n+                                        \"value\": \"America/Anchorage\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Anguilla\",\n+                                        \"value\": \"America/Anguilla\"\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\": \"Flowfiles that could not be parsed as a RFC-2822 compliant message\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Extraction was successful\",\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-                            \"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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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 original flowfile (i.e. before extraction) will be routed to the original relationship\",\n-                                \"name\": \"original\"\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 individual attachment will be routed to the attachments relationship\",\n-                                \"name\": \"attachments\"\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Antigua\",\n+                                        \"value\": \"America/Antigua\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"displayName\": \"America/Araguaina\",\n+                                        \"value\": \"America/Araguaina\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n+                                        \"value\": \"America/Argentina/Buenos_Aires\"\n+                                    },\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-M4\"\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-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-shopify-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-shopify-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Catamarca\",\n+                                        \"value\": \"America/Argentina/Catamarca\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n+                                        \"value\": \"America/Argentina/ComodRivadavia\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Cordoba\",\n+                                        \"value\": \"America/Argentina/Cordoba\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Jujuy\",\n+                                        \"value\": \"America/Argentina/Jujuy\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/La_Rioja\",\n+                                        \"value\": \"America/Argentina/La_Rioja\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Mendoza\",\n+                                        \"value\": \"America/Argentina/Mendoza\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n+                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n+                                    },\n                                     {\n-                                        \"description\": \"Shopify shops come with a built-in blogging engine, allowing a shop to have one or more blogs.\",\n-                                        \"displayName\": \"Blogs\",\n-                                        \"value\": \"blogs\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Salta\",\n+                                        \"value\": \"America/Argentina/Salta\"\n                                     },\n                                     {\n-                                        \"description\": \"A comment is a reader's response to an article in a blog.\",\n-                                        \"displayName\": \"Comments\",\n-                                        \"value\": \"comments\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Juan\",\n+                                        \"value\": \"America/Argentina/San_Juan\"\n                                     },\n                                     {\n-                                        \"description\": \"Shopify stores come with a tool for creating basic HTML web pages.\",\n-                                        \"displayName\": \"Pages\",\n-                                        \"value\": \"pages\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/San_Luis\",\n+                                        \"value\": \"America/Argentina/San_Luis\"\n                                     },\n                                     {\n-                                        \"description\": \"A redirect causes a visitor on a specific path on the shop's site to be automatically sent to a different location.\",\n-                                        \"displayName\": \"Redirects\",\n-                                        \"value\": \"redirects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Tucuman\",\n+                                        \"value\": \"America/Argentina/Tucuman\"\n                                     },\n                                     {\n-                                        \"description\": \"The ScriptTag resource represents remote JavaScript code that is loaded into the pages of a shop's storefront or the order status page of checkout.\",\n-                                        \"displayName\": \"Script Tags\",\n-                                        \"value\": \"script_tags\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Argentina/Ushuaia\",\n+                                        \"value\": \"America/Argentina/Ushuaia\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Aruba\",\n+                                        \"value\": \"America/Aruba\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Asuncion\",\n+                                        \"value\": \"America/Asuncion\"\n+                                    },\n                                     {\n-                                        \"description\": \"A checkout is considered abandoned after the customer has added contact information, but before the customer has completed their purchase.\",\n-                                        \"displayName\": \"Abandoned Checkouts\",\n-                                        \"value\": \"checkouts\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atikokan\",\n+                                        \"value\": \"America/Atikokan\"\n                                     },\n                                     {\n-                                        \"description\": \"Merchants can use draft orders to create orders on behalf of their customers.\",\n-                                        \"displayName\": \"Draft Orders\",\n-                                        \"value\": \"draft_orders\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Atka\",\n+                                        \"value\": \"America/Atka\"\n                                     },\n                                     {\n-                                        \"description\": \"An order is a customer's request to purchase one or more products from a shop.\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"orders\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia\",\n+                                        \"value\": \"America/Bahia\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bahia_Banderas\",\n+                                        \"value\": \"America/Bahia_Banderas\"\n+                                    },\n                                     {\n-                                        \"description\": \"Collects are meant for managing the relationship between products and custom collections.\",\n-                                        \"displayName\": \"Collects\",\n-                                        \"value\": \"collects\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Barbados\",\n+                                        \"value\": \"America/Barbados\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belem\",\n+                                        \"value\": \"America/Belem\"\n                                     },\n                                     {\n-                                        \"description\": \"Get products in a merchant's store \",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"products\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Belize\",\n+                                        \"value\": \"America/Belize\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Blanc-Sablon\",\n+                                        \"value\": \"America/Blanc-Sablon\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boa_Vista\",\n+                                        \"value\": \"America/Boa_Vista\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Bogota\",\n+                                        \"value\": \"America/Bogota\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Boise\",\n+                                        \"value\": \"America/Boise\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Buenos_Aires\",\n+                                        \"value\": \"America/Buenos_Aires\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cambridge_Bay\",\n+                                        \"value\": \"America/Cambridge_Bay\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Campo_Grande\",\n+                                        \"value\": \"America/Campo_Grande\"\n                                     },\n                                     {\n-                                        \"description\": \"Policy resource can be used to access the policies that a merchant has configured for their shop, such as their refund and privacy policies.\",\n-                                        \"displayName\": \"Policies\",\n-                                        \"value\": \"policies\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cancun\",\n+                                        \"value\": \"America/Cancun\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Caracas\",\n+                                        \"value\": \"America/Caracas\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Catamarca\",\n+                                        \"value\": \"America/Catamarca\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayenne\",\n+                                        \"value\": \"America/Cayenne\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cayman\",\n+                                        \"value\": \"America/Cayman\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Chicago\",\n+                                        \"value\": \"America/Chicago\"\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+                                        \"displayName\": \"America/Chihuahua\",\n+                                        \"value\": \"America/Chihuahua\"\n+                                    },\n                                     {\n-                                        \"description\": \"Query a Customer resource\",\n-                                        \"displayName\": \"Customers\",\n-                                        \"value\": \"CUSTOMERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ciudad_Juarez\",\n+                                        \"value\": \"America/Ciudad_Juarez\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Discount resource\",\n-                                        \"displayName\": \"Discounts\",\n-                                        \"value\": \"DISCOUNTS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Coral_Harbour\",\n+                                        \"value\": \"America/Coral_Harbour\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Inventory resource\",\n-                                        \"displayName\": \"Inventory\",\n-                                        \"value\": \"INVENTORY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cordoba\",\n+                                        \"value\": \"America/Cordoba\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Online Store resource\",\n-                                        \"displayName\": \"Online Store\",\n-                                        \"value\": \"ONLINE_STORE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Costa_Rica\",\n+                                        \"value\": \"America/Costa_Rica\"\n                                     },\n                                     {\n-                                        \"description\": \"Query an Order resource\",\n-                                        \"displayName\": \"Orders\",\n-                                        \"value\": \"ORDERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Creston\",\n+                                        \"value\": \"America/Creston\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Product resource\",\n-                                        \"displayName\": \"Products\",\n-                                        \"value\": \"PRODUCT\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Cuiaba\",\n+                                        \"value\": \"America/Cuiaba\"\n                                     },\n                                     {\n-                                        \"description\": \"Query a Sales Channel resource\",\n-                                        \"displayName\": \"Sales Channels\",\n-                                        \"value\": \"SALES_CHANNELS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Curacao\",\n+                                        \"value\": \"America/Curacao\"\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-M4\"\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-M4\",\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-M4\"\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\": \"19c5be0\"\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"component-type\": {\n-                                \"description\": \"Components of the given type will produce a rule violation (i.e. they shouldn't exist). Either the simple or the fully qualified name of the type should be provided.\",\n-                                \"displayName\": \"Component Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"component-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"component\",\n-                            \"controller service\",\n-                            \"processor\",\n-                            \"type\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.flowanalysis.rules.DisallowComponentType\",\n-                        \"typeDescription\": \"Produces rule violations for each component (i.e. processors or controller services) of a given type.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"db-type\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Danmarkshavn\",\n+                                        \"value\": \"America/Danmarkshavn\"\n+                                    },\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson\",\n+                                        \"value\": \"America/Dawson\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dawson_Creek\",\n+                                        \"value\": \"America/Dawson_Creek\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Denver\",\n+                                        \"value\": \"America/Denver\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Detroit\",\n+                                        \"value\": \"America/Detroit\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Dominica\",\n+                                        \"value\": \"America/Dominica\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Edmonton\",\n+                                        \"value\": \"America/Edmonton\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Eirunepe\",\n+                                        \"value\": \"America/Eirunepe\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-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\": \"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-M4\"\n-                                }\n-                            },\n-                            \"parameter-group-name-column\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/El_Salvador\",\n+                                        \"value\": \"America/El_Salvador\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-column\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a column containing the name of the parameter group into which the parameter should be mapped.\",\n-                                \"displayName\": \"Parameter Group Name Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-name-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-grouping-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ensenada\",\n+                                        \"value\": \"America/Ensenada\"\n+                                    },\n                                     {\n-                                        \"description\": \"A single table is partitioned by the 'Parameter Group Name Column'.  All rows with the same value in this column will map to a group of the same name.\",\n-                                        \"displayName\": \"Column\",\n-                                        \"value\": \"grouping-by-column\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Nelson\",\n+                                        \"value\": \"America/Fort_Nelson\"\n                                     },\n                                     {\n-                                        \"description\": \"An entire table maps to a Parameter Group.  The group name will be the table name.\",\n-                                        \"displayName\": \"Table Name\",\n-                                        \"value\": \"grouping-by-table-name\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"grouping-by-column\",\n-                                \"description\": \"The strategy used to group parameters.\",\n-                                \"displayName\": \"Parameter Grouping Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-grouping-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-name-column\": {\n-                                \"description\": \"The name of a column containing the parameter name.\",\n-                                \"displayName\": \"Parameter Name Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-name-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-column\": {\n-                                \"description\": \"The name of a column containing the parameter value.\",\n-                                \"displayName\": \"Parameter Value Column\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-column\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"sql-where-clause\": {\n-                                \"description\": \"A optional SQL query 'WHERE' clause by which to filter all results.  The 'WHERE' keyword should not be included.\",\n-                                \"displayName\": \"SQL WHERE clause\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sql-where-clause\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fort_Wayne\",\n+                                        \"value\": \"America/Fort_Wayne\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-column\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the database table containing the parameters.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-names\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Fortaleza\",\n+                                        \"value\": \"America/Fortaleza\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"grouping-by-table-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n-                                        \"propertyName\": \"parameter-grouping-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of names of the database tables containing the parameters.\",\n-                                \"displayName\": \"Table Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-names\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"sql\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.DatabaseParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from database tables\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read environment variables, which may contain environment credentials.\",\n-                                \"requiredPermission\": \"access environment credentials\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"environment-variable-inclusion-strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Glace_Bay\",\n+                                        \"value\": \"America/Glace_Bay\"\n+                                    },\n                                     {\n-                                        \"description\": \"All Environment Variables will be included\",\n-                                        \"displayName\": \"Include All\",\n-                                        \"value\": \"include-all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Godthab\",\n+                                        \"value\": \"America/Godthab\"\n                                     },\n                                     {\n-                                        \"description\": \"List comma-separated Environment Variable names to include\",\n-                                        \"displayName\": \"Comma-Separated\",\n-                                        \"value\": \"comma-separated\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Goose_Bay\",\n+                                        \"value\": \"America/Goose_Bay\"\n                                     },\n                                     {\n-                                        \"description\": \"Include Environment Variable names that match a Regular Expression\",\n-                                        \"displayName\": \"Regular Expression\",\n-                                        \"value\": \"regex\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"include-all\",\n-                                \"description\": \"Indicates how Environment Variables should be included\",\n-                                \"displayName\": \"Environment Variable Inclusion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"environment-variable-inclusion-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-environment-variables\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grand_Turk\",\n+                                        \"value\": \"America/Grand_Turk\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"regex\",\n-                                            \"comma-separated\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Environment Variable Inclusion Strategy\",\n-                                        \"propertyName\": \"environment-variable-inclusion-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies environment variable names that should be included from the fetched environment variables.\",\n-                                \"displayName\": \"Include Environment Variables\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-environment-variables\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-group-name\": {\n-                                \"defaultValue\": \"Environment Variables\",\n-                                \"description\": \"The name of the parameter group that will be fetched.  This indicates the name of the Parameter Context that may receive the fetched parameters.\",\n-                                \"displayName\": \"Parameter Group Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"environment\",\n-                            \"variable\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.EnvironmentVariableParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from environment variables\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                            \"parameter-group-directories\": {\n-                                \"description\": \"A comma-separated list of directory absolute paths that will map to named parameter groups.  Each directory that contains files will map to a parameter group, named after the innermost directory in the path.  Files inside the directory will map to parameter names, whose values are the content of each respective file.\",\n-                                \"displayName\": \"Parameter Group Directories\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-group-directories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-byte-limit\": {\n-                                \"defaultValue\": \"256 B\",\n-                                \"description\": \"The maximum byte size of a parameter value.  Since parameter values are pulled from the contents of files, this is a safeguard that can prevent memory issues if large files are included.\",\n-                                \"displayName\": \"Parameter Value Byte Limit\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-byte-limit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"parameter-value-encoding\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Grenada\",\n+                                        \"value\": \"America/Grenada\"\n+                                    },\n                                     {\n-                                        \"description\": \"File content is Base64-encoded, and will be decoded before providing the value as a Parameter.\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"base64\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guadeloupe\",\n+                                        \"value\": \"America/Guadeloupe\"\n                                     },\n                                     {\n-                                        \"description\": \"File content is not encoded, and will be provided directly as a Parameter value.\",\n-                                        \"displayName\": \"Plain text\",\n-                                        \"value\": \"plaintext\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"base64\",\n-                                \"description\": \"Indicates how parameter values are encoded inside Parameter files.\",\n-                                \"displayName\": \"Parameter Value Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameter-value-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"file\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.KubernetesSecretParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from files, in the format provided by Kubernetes mounted secrets.  Parameter groups are indicated by a set of directories, and files within the directories map to parameter names. The content of the file becomes the parameter value.  Since Kubernetes mounted Secrets are base64-encoded, the parameter provider defaults to Base64-decoding the value of the parameter from the file.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Access Token\": {\n-                                \"description\": \"Access Token used for authentication against the 1Password APIs.\",\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-                            \"Connect Server\": {\n-                                \"description\": \"HTTP endpoint of the 1Password Connect Server to connect to. Example: http://localhost:8080\",\n-                                \"displayName\": \"Connect Server\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connect Server\",\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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"1Password\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.parameter.OnePasswordParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from 1Password Connect Server\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guatemala\",\n+                                        \"value\": \"America/Guatemala\"\n+                                    },\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guayaquil\",\n+                                        \"value\": \"America/Guayaquil\"\n                                     },\n                                     {\n-                                        \"description\": \"The resulting CSV string will be placed into the content of the flowfile.Existing flowfile context will be overwritten. 'CSVData' will not be written to at all (neither null nor empty string).\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"flowfile-attribute\",\n-                                \"description\": \"Control if CSV value is written as a new flowfile attribute 'CSVData' or written in the flowfile content.\",\n-                                \"displayName\": \"Destination\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-core-attributes\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Guyana\",\n+                                        \"value\": \"America/Guyana\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Halifax\",\n+                                        \"value\": \"America/Halifax\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-core-attributes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"include-schema\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Havana\",\n+                                        \"value\": \"America/Havana\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Hermosillo\",\n+                                        \"value\": \"America/Hermosillo\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include-schema\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"null-value\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Indiana/Indianapolis\",\n+                                        \"value\": \"America/Indiana/Indianapolis\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Indiana/Knox\",\n+                                        \"value\": \"America/Indiana/Knox\"\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"America/Indiana/Marengo\",\n+                                        \"value\": \"America/Indiana/Marengo\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"displayName\": \"America/Indiana/Petersburg\",\n+                                        \"value\": \"America/Indiana/Petersburg\"\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\": \"America/Indiana/Tell_City\",\n+                                        \"value\": \"America/Indiana/Tell_City\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Indiana/Vevay\",\n+                                        \"value\": \"America/Indiana/Vevay\"\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\": \"America/Indiana/Vincennes\",\n+                                        \"value\": \"America/Indiana/Vincennes\"\n+                                    },\n                                     {\n-                                        \"description\": \"Escapes JSON attribute values to strings\",\n-                                        \"displayName\": \"Escaped\",\n-                                        \"value\": \"ESCAPED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indiana/Winamac\",\n+                                        \"value\": \"America/Indiana/Winamac\"\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\": \"JSON Handling Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Null Value\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Indianapolis\",\n+                                        \"value\": \"America/Indianapolis\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Inuvik\",\n+                                        \"value\": \"America/Inuvik\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If 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\": \"Null Value\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Pretty Print\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Iqaluit\",\n+                                        \"value\": \"America/Iqaluit\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/Jamaica\",\n+                                        \"value\": \"America/Jamaica\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Jujuy\",\n+                                        \"value\": \"America/Jujuy\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"Apply pretty print formatting to the output.\",\n-                                \"displayName\": \"Pretty Print\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\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-                                \"dynamic\": false,\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-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\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\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"json\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"JSON representation of Attributes\",\n-                                \"name\": \"JSONAttributes\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Record Path property\",\n-                                \"value\": \"The Record Path value\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"record-stats-limit\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-stats-reader\": {\n-                                \"description\": \"A record reader to use for reading the records.\",\n-                                \"displayName\": \"Record Reader\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\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\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"metrics\",\n-                            \"record\",\n-                            \"stats\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Juneau\",\n+                                        \"value\": \"America/Juneau\"\n+                                    },\n                                     {\n-                                        \"configuration\": \"Default property values are sufficient.\\nConnect the 'success' relationship to CompressContent.\\n\",\n-                                        \"processorClassName\": \"org.apache.nifi.processors.standard.IdentifyMimeType\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Louisville\",\n+                                        \"value\": \"America/Kentucky/Louisville\"\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-                            \"Compression Format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Kentucky/Monticello\",\n+                                        \"value\": \"America/Kentucky/Monticello\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n+                                        \"displayName\": \"America/Knox_IN\",\n+                                        \"value\": \"America/Knox_IN\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"displayName\": \"America/Kralendijk\",\n+                                        \"value\": \"America/Kralendijk\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n+                                        \"displayName\": \"America/La_Paz\",\n+                                        \"value\": \"America/La_Paz\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n+                                        \"displayName\": \"America/Lima\",\n+                                        \"value\": \"America/Lima\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n+                                        \"displayName\": \"America/Los_Angeles\",\n+                                        \"value\": \"America/Los_Angeles\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n+                                        \"displayName\": \"America/Louisville\",\n+                                        \"value\": \"America/Louisville\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"displayName\": \"America/Lower_Princes\",\n+                                        \"value\": \"America/Lower_Princes\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy-hadoop\",\n-                                        \"value\": \"snappy-hadoop\"\n+                                        \"displayName\": \"America/Maceio\",\n+                                        \"value\": \"America/Maceio\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"snappy framed\",\n-                                        \"value\": \"snappy framed\"\n+                                        \"displayName\": \"America/Managua\",\n+                                        \"value\": \"America/Managua\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\n+                                        \"displayName\": \"America/Manaus\",\n+                                        \"value\": \"America/Manaus\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\n+                                        \"displayName\": \"America/Marigot\",\n+                                        \"value\": \"America/Marigot\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n-                                \"displayName\": \"Compression Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Format\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Compression Level\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Martinique\",\n+                                        \"value\": \"America/Martinique\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"0\",\n-                                        \"value\": \"0\"\n+                                        \"displayName\": \"America/Matamoros\",\n+                                        \"value\": \"America/Matamoros\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"1\",\n-                                        \"value\": \"1\"\n+                                        \"displayName\": \"America/Mazatlan\",\n+                                        \"value\": \"America/Mazatlan\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"displayName\": \"America/Mendoza\",\n+                                        \"value\": \"America/Mendoza\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\n+                                        \"displayName\": \"America/Menominee\",\n+                                        \"value\": \"America/Menominee\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"displayName\": \"America/Merida\",\n+                                        \"value\": \"America/Merida\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"displayName\": \"America/Metlakatla\",\n+                                        \"value\": \"America/Metlakatla\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"displayName\": \"America/Mexico_City\",\n+                                        \"value\": \"America/Mexico_City\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"displayName\": \"America/Miquelon\",\n+                                        \"value\": \"America/Miquelon\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"displayName\": \"America/Moncton\",\n+                                        \"value\": \"America/Moncton\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Monterrey\",\n+                                        \"value\": \"America/Monterrey\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"compress\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montevideo\",\n+                                        \"value\": \"America/Montevideo\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"zstd\",\n-                                            \"use mime.type attribute\",\n-                                            \"deflate\",\n-                                            \"brotli\",\n-                                            \"gzip\",\n-                                            \"xz-lzma2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Compression Format\",\n-                                        \"propertyName\": \"Compression Format\"\n-                                    }\n-                                ],\n-                                \"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\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Montreal\",\n+                                        \"value\": \"America/Montreal\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"compress\",\n-                                        \"value\": \"compress\"\n+                                        \"displayName\": \"America/Montserrat\",\n+                                        \"value\": \"America/Montserrat\"\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\": \"Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Update Filename\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"America/Nassau\",\n+                                        \"value\": \"America/Nassau\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"America/New_York\",\n+                                        \"value\": \"America/New_York\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"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\": \"Update Filename\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\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\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"CPU\"\n-                            },\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n-                        \"tags\": [\n-                            \"brotli\",\n-                            \"bzip2\",\n-                            \"compress\",\n-                            \"content\",\n-                            \"decompress\",\n-                            \"deflate\",\n-                            \"gzip\",\n-                            \"lz4-framed\",\n-                            \"lzma\",\n-                            \"snappy\",\n-                            \"snappy framed\",\n-                            \"snappy-hadoop\",\n-                            \"xz-lzma2\",\n-                            \"zstd\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n-                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n-                        \"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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the Mode property is set to compress, the appropriate MIME Type is set. If the Mode property is set to decompress and the file is successfully decompressed, this attribute is removed, as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grouping Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Data Rate\": {\n-                                \"dependencies\": [\n+                                        \"displayName\": \"America/Nipigon\",\n+                                        \"value\": \"America/Nipigon\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n-                                \"displayName\": \"Maximum Data Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Data Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum FlowFile Rate\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Nome\",\n+                                        \"value\": \"America/Nome\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate or flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which FlowFiles should pass through this processor. The format of this property is expected to be a positive integer representing FlowFiles count per Time Duration\",\n-                                \"displayName\": \"Maximum FlowFile Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum FlowFile Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Maximum Rate\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Noronha\",\n+                                        \"value\": \"America/Noronha\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"data rate\",\n-                                            \"attribute value\",\n-                                            \"flowfile count\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n-                                    }\n-                                ],\n-                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a positive integer, or a Data Size (such as '1 MB') if Rate Control Criteria is set to 'data rate'.\",\n-                                \"displayName\": \"Maximum Rate\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Rate\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Rate Control Criteria\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/North_Dakota/Beulah\",\n+                                        \"value\": \"America/North_Dakota/Beulah\"\n+                                    },\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\": \"America/North_Dakota/Center\",\n+                                        \"value\": \"America/North_Dakota/Center\"\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\": \"America/North_Dakota/New_Salem\",\n+                                        \"value\": \"America/North_Dakota/New_Salem\"\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\": \"America/Nuuk\",\n+                                        \"value\": \"America/Nuuk\"\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\": \"Rate Control Criteria\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Rate Controlled Attribute\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Ojinaga\",\n+                                        \"value\": \"America/Ojinaga\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"attribute value\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n-                                        \"propertyName\": \"Rate Control Criteria\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Panama\",\n+                                        \"value\": \"America/Panama\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Pangnirtung\",\n+                                        \"value\": \"America/Pangnirtung\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Paramaribo\",\n+                                        \"value\": \"America/Paramaribo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Phoenix\",\n+                                        \"value\": \"America/Phoenix\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port-au-Prince\",\n+                                        \"value\": \"America/Port-au-Prince\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Port_of_Spain\",\n+                                        \"value\": \"America/Port_of_Spain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Acre\",\n+                                        \"value\": \"America/Porto_Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Porto_Velho\",\n+                                        \"value\": \"America/Porto_Velho\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Puerto_Rico\",\n+                                        \"value\": \"America/Puerto_Rico\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Punta_Arenas\",\n+                                        \"value\": \"America/Punta_Arenas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rainy_River\",\n+                                        \"value\": \"America/Rainy_River\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rankin_Inlet\",\n+                                        \"value\": \"America/Rankin_Inlet\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Recife\",\n+                                        \"value\": \"America/Recife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Regina\",\n+                                        \"value\": \"America/Regina\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Resolute\",\n+                                        \"value\": \"America/Resolute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rio_Branco\",\n+                                        \"value\": \"America/Rio_Branco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Rosario\",\n+                                        \"value\": \"America/Rosario\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santa_Isabel\",\n+                                        \"value\": \"America/Santa_Isabel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santarem\",\n+                                        \"value\": \"America/Santarem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santiago\",\n+                                        \"value\": \"America/Santiago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Santo_Domingo\",\n+                                        \"value\": \"America/Santo_Domingo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sao_Paulo\",\n+                                        \"value\": \"America/Sao_Paulo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Scoresbysund\",\n+                                        \"value\": \"America/Scoresbysund\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Shiprock\",\n+                                        \"value\": \"America/Shiprock\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Sitka\",\n+                                        \"value\": \"America/Sitka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Barthelemy\",\n+                                        \"value\": \"America/St_Barthelemy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Johns\",\n+                                        \"value\": \"America/St_Johns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Kitts\",\n+                                        \"value\": \"America/St_Kitts\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Lucia\",\n+                                        \"value\": \"America/St_Lucia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Thomas\",\n+                                        \"value\": \"America/St_Thomas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/St_Vincent\",\n+                                        \"value\": \"America/St_Vincent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Swift_Current\",\n+                                        \"value\": \"America/Swift_Current\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tegucigalpa\",\n+                                        \"value\": \"America/Tegucigalpa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thule\",\n+                                        \"value\": \"America/Thule\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Thunder_Bay\",\n+                                        \"value\": \"America/Thunder_Bay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tijuana\",\n+                                        \"value\": \"America/Tijuana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Toronto\",\n+                                        \"value\": \"America/Toronto\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Tortola\",\n+                                        \"value\": \"America/Tortola\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Vancouver\",\n+                                        \"value\": \"America/Vancouver\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Virgin\",\n+                                        \"value\": \"America/Virgin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Whitehorse\",\n+                                        \"value\": \"America/Whitehorse\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Winnipeg\",\n+                                        \"value\": \"America/Winnipeg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yakutat\",\n+                                        \"value\": \"America/Yakutat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"America/Yellowknife\",\n+                                        \"value\": \"America/Yellowknife\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Casey\",\n+                                        \"value\": \"Antarctica/Casey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Davis\",\n+                                        \"value\": \"Antarctica/Davis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/DumontDUrville\",\n+                                        \"value\": \"Antarctica/DumontDUrville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Macquarie\",\n+                                        \"value\": \"Antarctica/Macquarie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Mawson\",\n+                                        \"value\": \"Antarctica/Mawson\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/McMurdo\",\n+                                        \"value\": \"Antarctica/McMurdo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Palmer\",\n+                                        \"value\": \"Antarctica/Palmer\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Rothera\",\n+                                        \"value\": \"Antarctica/Rothera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/South_Pole\",\n+                                        \"value\": \"Antarctica/South_Pole\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Syowa\",\n+                                        \"value\": \"Antarctica/Syowa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Troll\",\n+                                        \"value\": \"Antarctica/Troll\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Antarctica/Vostok\",\n+                                        \"value\": \"Antarctica/Vostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Arctic/Longyearbyen\",\n+                                        \"value\": \"Arctic/Longyearbyen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aden\",\n+                                        \"value\": \"Asia/Aden\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Almaty\",\n+                                        \"value\": \"Asia/Almaty\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Amman\",\n+                                        \"value\": \"Asia/Amman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Anadyr\",\n+                                        \"value\": \"Asia/Anadyr\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtau\",\n+                                        \"value\": \"Asia/Aqtau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Aqtobe\",\n+                                        \"value\": \"Asia/Aqtobe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashgabat\",\n+                                        \"value\": \"Asia/Ashgabat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ashkhabad\",\n+                                        \"value\": \"Asia/Ashkhabad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Atyrau\",\n+                                        \"value\": \"Asia/Atyrau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baghdad\",\n+                                        \"value\": \"Asia/Baghdad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bahrain\",\n+                                        \"value\": \"Asia/Bahrain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Baku\",\n+                                        \"value\": \"Asia/Baku\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bangkok\",\n+                                        \"value\": \"Asia/Bangkok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Barnaul\",\n+                                        \"value\": \"Asia/Barnaul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Beirut\",\n+                                        \"value\": \"Asia/Beirut\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Bishkek\",\n+                                        \"value\": \"Asia/Bishkek\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Brunei\",\n+                                        \"value\": \"Asia/Brunei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Calcutta\",\n+                                        \"value\": \"Asia/Calcutta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chita\",\n+                                        \"value\": \"Asia/Chita\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Choibalsan\",\n+                                        \"value\": \"Asia/Choibalsan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chongqing\",\n+                                        \"value\": \"Asia/Chongqing\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Chungking\",\n+                                        \"value\": \"Asia/Chungking\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Colombo\",\n+                                        \"value\": \"Asia/Colombo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dacca\",\n+                                        \"value\": \"Asia/Dacca\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Damascus\",\n+                                        \"value\": \"Asia/Damascus\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dhaka\",\n+                                        \"value\": \"Asia/Dhaka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dili\",\n+                                        \"value\": \"Asia/Dili\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dubai\",\n+                                        \"value\": \"Asia/Dubai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Dushanbe\",\n+                                        \"value\": \"Asia/Dushanbe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Famagusta\",\n+                                        \"value\": \"Asia/Famagusta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Gaza\",\n+                                        \"value\": \"Asia/Gaza\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Harbin\",\n+                                        \"value\": \"Asia/Harbin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hebron\",\n+                                        \"value\": \"Asia/Hebron\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n+                                        \"value\": \"Asia/Ho_Chi_Minh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hong_Kong\",\n+                                        \"value\": \"Asia/Hong_Kong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Hovd\",\n+                                        \"value\": \"Asia/Hovd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Irkutsk\",\n+                                        \"value\": \"Asia/Irkutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Istanbul\",\n+                                        \"value\": \"Asia/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jakarta\",\n+                                        \"value\": \"Asia/Jakarta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jayapura\",\n+                                        \"value\": \"Asia/Jayapura\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Jerusalem\",\n+                                        \"value\": \"Asia/Jerusalem\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kabul\",\n+                                        \"value\": \"Asia/Kabul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kamchatka\",\n+                                        \"value\": \"Asia/Kamchatka\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Karachi\",\n+                                        \"value\": \"Asia/Karachi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kashgar\",\n+                                        \"value\": \"Asia/Kashgar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kathmandu\",\n+                                        \"value\": \"Asia/Kathmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Katmandu\",\n+                                        \"value\": \"Asia/Katmandu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Khandyga\",\n+                                        \"value\": \"Asia/Khandyga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kolkata\",\n+                                        \"value\": \"Asia/Kolkata\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Krasnoyarsk\",\n+                                        \"value\": \"Asia/Krasnoyarsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n+                                        \"value\": \"Asia/Kuala_Lumpur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuching\",\n+                                        \"value\": \"Asia/Kuching\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Kuwait\",\n+                                        \"value\": \"Asia/Kuwait\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macao\",\n+                                        \"value\": \"Asia/Macao\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Macau\",\n+                                        \"value\": \"Asia/Macau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Magadan\",\n+                                        \"value\": \"Asia/Magadan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Makassar\",\n+                                        \"value\": \"Asia/Makassar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Manila\",\n+                                        \"value\": \"Asia/Manila\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Muscat\",\n+                                        \"value\": \"Asia/Muscat\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Nicosia\",\n+                                        \"value\": \"Asia/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novokuznetsk\",\n+                                        \"value\": \"Asia/Novokuznetsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Novosibirsk\",\n+                                        \"value\": \"Asia/Novosibirsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Omsk\",\n+                                        \"value\": \"Asia/Omsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Oral\",\n+                                        \"value\": \"Asia/Oral\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Phnom_Penh\",\n+                                        \"value\": \"Asia/Phnom_Penh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pontianak\",\n+                                        \"value\": \"Asia/Pontianak\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Pyongyang\",\n+                                        \"value\": \"Asia/Pyongyang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qatar\",\n+                                        \"value\": \"Asia/Qatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qostanay\",\n+                                        \"value\": \"Asia/Qostanay\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Qyzylorda\",\n+                                        \"value\": \"Asia/Qyzylorda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Rangoon\",\n+                                        \"value\": \"Asia/Rangoon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Riyadh\",\n+                                        \"value\": \"Asia/Riyadh\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Saigon\",\n+                                        \"value\": \"Asia/Saigon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Sakhalin\",\n+                                        \"value\": \"Asia/Sakhalin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Samarkand\",\n+                                        \"value\": \"Asia/Samarkand\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Seoul\",\n+                                        \"value\": \"Asia/Seoul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Shanghai\",\n+                                        \"value\": \"Asia/Shanghai\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Singapore\",\n+                                        \"value\": \"Asia/Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Srednekolymsk\",\n+                                        \"value\": \"Asia/Srednekolymsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Taipei\",\n+                                        \"value\": \"Asia/Taipei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tashkent\",\n+                                        \"value\": \"Asia/Tashkent\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tbilisi\",\n+                                        \"value\": \"Asia/Tbilisi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tehran\",\n+                                        \"value\": \"Asia/Tehran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tel_Aviv\",\n+                                        \"value\": \"Asia/Tel_Aviv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimbu\",\n+                                        \"value\": \"Asia/Thimbu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Thimphu\",\n+                                        \"value\": \"Asia/Thimphu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tokyo\",\n+                                        \"value\": \"Asia/Tokyo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Tomsk\",\n+                                        \"value\": \"Asia/Tomsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ujung_Pandang\",\n+                                        \"value\": \"Asia/Ujung_Pandang\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulaanbaatar\",\n+                                        \"value\": \"Asia/Ulaanbaatar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ulan_Bator\",\n+                                        \"value\": \"Asia/Ulan_Bator\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Urumqi\",\n+                                        \"value\": \"Asia/Urumqi\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Ust-Nera\",\n+                                        \"value\": \"Asia/Ust-Nera\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vientiane\",\n+                                        \"value\": \"Asia/Vientiane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Vladivostok\",\n+                                        \"value\": \"Asia/Vladivostok\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yakutsk\",\n+                                        \"value\": \"Asia/Yakutsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yangon\",\n+                                        \"value\": \"Asia/Yangon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yekaterinburg\",\n+                                        \"value\": \"Asia/Yekaterinburg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Asia/Yerevan\",\n+                                        \"value\": \"Asia/Yerevan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Azores\",\n+                                        \"value\": \"Atlantic/Azores\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Bermuda\",\n+                                        \"value\": \"Atlantic/Bermuda\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Canary\",\n+                                        \"value\": \"Atlantic/Canary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Cape_Verde\",\n+                                        \"value\": \"Atlantic/Cape_Verde\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faeroe\",\n+                                        \"value\": \"Atlantic/Faeroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Faroe\",\n+                                        \"value\": \"Atlantic/Faroe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n+                                        \"value\": \"Atlantic/Jan_Mayen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Madeira\",\n+                                        \"value\": \"Atlantic/Madeira\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Reykjavik\",\n+                                        \"value\": \"Atlantic/Reykjavik\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/South_Georgia\",\n+                                        \"value\": \"Atlantic/South_Georgia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/St_Helena\",\n+                                        \"value\": \"Atlantic/St_Helena\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Atlantic/Stanley\",\n+                                        \"value\": \"Atlantic/Stanley\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/ACT\",\n+                                        \"value\": \"Australia/ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Adelaide\",\n+                                        \"value\": \"Australia/Adelaide\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Brisbane\",\n+                                        \"value\": \"Australia/Brisbane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Broken_Hill\",\n+                                        \"value\": \"Australia/Broken_Hill\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Canberra\",\n+                                        \"value\": \"Australia/Canberra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Currie\",\n+                                        \"value\": \"Australia/Currie\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Darwin\",\n+                                        \"value\": \"Australia/Darwin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Eucla\",\n+                                        \"value\": \"Australia/Eucla\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Hobart\",\n+                                        \"value\": \"Australia/Hobart\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/LHI\",\n+                                        \"value\": \"Australia/LHI\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lindeman\",\n+                                        \"value\": \"Australia/Lindeman\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Lord_Howe\",\n+                                        \"value\": \"Australia/Lord_Howe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Melbourne\",\n+                                        \"value\": \"Australia/Melbourne\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/NSW\",\n+                                        \"value\": \"Australia/NSW\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/North\",\n+                                        \"value\": \"Australia/North\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Perth\",\n+                                        \"value\": \"Australia/Perth\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Queensland\",\n+                                        \"value\": \"Australia/Queensland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/South\",\n+                                        \"value\": \"Australia/South\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Sydney\",\n+                                        \"value\": \"Australia/Sydney\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Tasmania\",\n+                                        \"value\": \"Australia/Tasmania\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Victoria\",\n+                                        \"value\": \"Australia/Victoria\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/West\",\n+                                        \"value\": \"Australia/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Australia/Yancowinna\",\n+                                        \"value\": \"Australia/Yancowinna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/Acre\",\n+                                        \"value\": \"Brazil/Acre\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/DeNoronha\",\n+                                        \"value\": \"Brazil/DeNoronha\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/East\",\n+                                        \"value\": \"Brazil/East\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Brazil/West\",\n+                                        \"value\": \"Brazil/West\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CET\",\n+                                        \"value\": \"CET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST6CDT\",\n+                                        \"value\": \"CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Atlantic\",\n+                                        \"value\": \"Canada/Atlantic\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Central\",\n+                                        \"value\": \"Canada/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Eastern\",\n+                                        \"value\": \"Canada/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Mountain\",\n+                                        \"value\": \"Canada/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Newfoundland\",\n+                                        \"value\": \"Canada/Newfoundland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Pacific\",\n+                                        \"value\": \"Canada/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Saskatchewan\",\n+                                        \"value\": \"Canada/Saskatchewan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Canada/Yukon\",\n+                                        \"value\": \"Canada/Yukon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/Continental\",\n+                                        \"value\": \"Chile/Continental\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chile/EasterIsland\",\n+                                        \"value\": \"Chile/EasterIsland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Cuba\",\n+                                        \"value\": \"Cuba\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EET\",\n+                                        \"value\": \"EET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST5EDT\",\n+                                        \"value\": \"EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Egypt\",\n+                                        \"value\": \"Egypt\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Eire\",\n+                                        \"value\": \"Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT\",\n+                                        \"value\": \"Etc/GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+0\",\n+                                        \"value\": \"Etc/GMT+0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+1\",\n+                                        \"value\": \"Etc/GMT+1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+10\",\n+                                        \"value\": \"Etc/GMT+10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+11\",\n+                                        \"value\": \"Etc/GMT+11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+12\",\n+                                        \"value\": \"Etc/GMT+12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+2\",\n+                                        \"value\": \"Etc/GMT+2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+3\",\n+                                        \"value\": \"Etc/GMT+3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+4\",\n+                                        \"value\": \"Etc/GMT+4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+5\",\n+                                        \"value\": \"Etc/GMT+5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+6\",\n+                                        \"value\": \"Etc/GMT+6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+7\",\n+                                        \"value\": \"Etc/GMT+7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+8\",\n+                                        \"value\": \"Etc/GMT+8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT+9\",\n+                                        \"value\": \"Etc/GMT+9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-0\",\n+                                        \"value\": \"Etc/GMT-0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-1\",\n+                                        \"value\": \"Etc/GMT-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-10\",\n+                                        \"value\": \"Etc/GMT-10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-11\",\n+                                        \"value\": \"Etc/GMT-11\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-12\",\n+                                        \"value\": \"Etc/GMT-12\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-13\",\n+                                        \"value\": \"Etc/GMT-13\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-14\",\n+                                        \"value\": \"Etc/GMT-14\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-2\",\n+                                        \"value\": \"Etc/GMT-2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-3\",\n+                                        \"value\": \"Etc/GMT-3\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-4\",\n+                                        \"value\": \"Etc/GMT-4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-5\",\n+                                        \"value\": \"Etc/GMT-5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-6\",\n+                                        \"value\": \"Etc/GMT-6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-7\",\n+                                        \"value\": \"Etc/GMT-7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-8\",\n+                                        \"value\": \"Etc/GMT-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT-9\",\n+                                        \"value\": \"Etc/GMT-9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/GMT0\",\n+                                        \"value\": \"Etc/GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Greenwich\",\n+                                        \"value\": \"Etc/Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UCT\",\n+                                        \"value\": \"Etc/UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/UTC\",\n+                                        \"value\": \"Etc/UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Universal\",\n+                                        \"value\": \"Etc/Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Etc/Zulu\",\n+                                        \"value\": \"Etc/Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Amsterdam\",\n+                                        \"value\": \"Europe/Amsterdam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Andorra\",\n+                                        \"value\": \"Europe/Andorra\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Astrakhan\",\n+                                        \"value\": \"Europe/Astrakhan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Athens\",\n+                                        \"value\": \"Europe/Athens\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belfast\",\n+                                        \"value\": \"Europe/Belfast\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Belgrade\",\n+                                        \"value\": \"Europe/Belgrade\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Berlin\",\n+                                        \"value\": \"Europe/Berlin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bratislava\",\n+                                        \"value\": \"Europe/Bratislava\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Brussels\",\n+                                        \"value\": \"Europe/Brussels\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Bucharest\",\n+                                        \"value\": \"Europe/Bucharest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Budapest\",\n+                                        \"value\": \"Europe/Budapest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Busingen\",\n+                                        \"value\": \"Europe/Busingen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Chisinau\",\n+                                        \"value\": \"Europe/Chisinau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Copenhagen\",\n+                                        \"value\": \"Europe/Copenhagen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Dublin\",\n+                                        \"value\": \"Europe/Dublin\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Gibraltar\",\n+                                        \"value\": \"Europe/Gibraltar\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Guernsey\",\n+                                        \"value\": \"Europe/Guernsey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Helsinki\",\n+                                        \"value\": \"Europe/Helsinki\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Isle_of_Man\",\n+                                        \"value\": \"Europe/Isle_of_Man\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Istanbul\",\n+                                        \"value\": \"Europe/Istanbul\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Jersey\",\n+                                        \"value\": \"Europe/Jersey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kaliningrad\",\n+                                        \"value\": \"Europe/Kaliningrad\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kiev\",\n+                                        \"value\": \"Europe/Kiev\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kirov\",\n+                                        \"value\": \"Europe/Kirov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Kyiv\",\n+                                        \"value\": \"Europe/Kyiv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Lisbon\",\n+                                        \"value\": \"Europe/Lisbon\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ljubljana\",\n+                                        \"value\": \"Europe/Ljubljana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/London\",\n+                                        \"value\": \"Europe/London\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Luxembourg\",\n+                                        \"value\": \"Europe/Luxembourg\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Madrid\",\n+                                        \"value\": \"Europe/Madrid\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Malta\",\n+                                        \"value\": \"Europe/Malta\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Mariehamn\",\n+                                        \"value\": \"Europe/Mariehamn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Minsk\",\n+                                        \"value\": \"Europe/Minsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Monaco\",\n+                                        \"value\": \"Europe/Monaco\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Moscow\",\n+                                        \"value\": \"Europe/Moscow\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Nicosia\",\n+                                        \"value\": \"Europe/Nicosia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Oslo\",\n+                                        \"value\": \"Europe/Oslo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Paris\",\n+                                        \"value\": \"Europe/Paris\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Podgorica\",\n+                                        \"value\": \"Europe/Podgorica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Prague\",\n+                                        \"value\": \"Europe/Prague\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Riga\",\n+                                        \"value\": \"Europe/Riga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Rome\",\n+                                        \"value\": \"Europe/Rome\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Samara\",\n+                                        \"value\": \"Europe/Samara\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/San_Marino\",\n+                                        \"value\": \"Europe/San_Marino\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sarajevo\",\n+                                        \"value\": \"Europe/Sarajevo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Saratov\",\n+                                        \"value\": \"Europe/Saratov\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Simferopol\",\n+                                        \"value\": \"Europe/Simferopol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Skopje\",\n+                                        \"value\": \"Europe/Skopje\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Sofia\",\n+                                        \"value\": \"Europe/Sofia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Stockholm\",\n+                                        \"value\": \"Europe/Stockholm\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tallinn\",\n+                                        \"value\": \"Europe/Tallinn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tirane\",\n+                                        \"value\": \"Europe/Tirane\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Tiraspol\",\n+                                        \"value\": \"Europe/Tiraspol\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Ulyanovsk\",\n+                                        \"value\": \"Europe/Ulyanovsk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Uzhgorod\",\n+                                        \"value\": \"Europe/Uzhgorod\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vaduz\",\n+                                        \"value\": \"Europe/Vaduz\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vatican\",\n+                                        \"value\": \"Europe/Vatican\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vienna\",\n+                                        \"value\": \"Europe/Vienna\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Vilnius\",\n+                                        \"value\": \"Europe/Vilnius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Volgograd\",\n+                                        \"value\": \"Europe/Volgograd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Warsaw\",\n+                                        \"value\": \"Europe/Warsaw\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zagreb\",\n+                                        \"value\": \"Europe/Zagreb\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zaporozhye\",\n+                                        \"value\": \"Europe/Zaporozhye\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Europe/Zurich\",\n+                                        \"value\": \"Europe/Zurich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB\",\n+                                        \"value\": \"GB\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GB-Eire\",\n+                                        \"value\": \"GB-Eire\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT\",\n+                                        \"value\": \"GMT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GMT0\",\n+                                        \"value\": \"GMT0\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Greenwich\",\n+                                        \"value\": \"Greenwich\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Hongkong\",\n+                                        \"value\": \"Hongkong\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iceland\",\n+                                        \"value\": \"Iceland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Antananarivo\",\n+                                        \"value\": \"Indian/Antananarivo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Chagos\",\n+                                        \"value\": \"Indian/Chagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Christmas\",\n+                                        \"value\": \"Indian/Christmas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Cocos\",\n+                                        \"value\": \"Indian/Cocos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Comoro\",\n+                                        \"value\": \"Indian/Comoro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Kerguelen\",\n+                                        \"value\": \"Indian/Kerguelen\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mahe\",\n+                                        \"value\": \"Indian/Mahe\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Maldives\",\n+                                        \"value\": \"Indian/Maldives\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mauritius\",\n+                                        \"value\": \"Indian/Mauritius\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Mayotte\",\n+                                        \"value\": \"Indian/Mayotte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Indian/Reunion\",\n+                                        \"value\": \"Indian/Reunion\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Iran\",\n+                                        \"value\": \"Iran\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Israel\",\n+                                        \"value\": \"Israel\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Jamaica\",\n+                                        \"value\": \"Jamaica\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Japan\",\n+                                        \"value\": \"Japan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Kwajalein\",\n+                                        \"value\": \"Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Libya\",\n+                                        \"value\": \"Libya\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MET\",\n+                                        \"value\": \"MET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST7MDT\",\n+                                        \"value\": \"MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaNorte\",\n+                                        \"value\": \"Mexico/BajaNorte\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/BajaSur\",\n+                                        \"value\": \"Mexico/BajaSur\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Mexico/General\",\n+                                        \"value\": \"Mexico/General\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ\",\n+                                        \"value\": \"NZ\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NZ-CHAT\",\n+                                        \"value\": \"NZ-CHAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Navajo\",\n+                                        \"value\": \"Navajo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRC\",\n+                                        \"value\": \"PRC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST8PDT\",\n+                                        \"value\": \"PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Apia\",\n+                                        \"value\": \"Pacific/Apia\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Auckland\",\n+                                        \"value\": \"Pacific/Auckland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Bougainville\",\n+                                        \"value\": \"Pacific/Bougainville\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chatham\",\n+                                        \"value\": \"Pacific/Chatham\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Chuuk\",\n+                                        \"value\": \"Pacific/Chuuk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Easter\",\n+                                        \"value\": \"Pacific/Easter\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Efate\",\n+                                        \"value\": \"Pacific/Efate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Enderbury\",\n+                                        \"value\": \"Pacific/Enderbury\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fakaofo\",\n+                                        \"value\": \"Pacific/Fakaofo\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Fiji\",\n+                                        \"value\": \"Pacific/Fiji\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Funafuti\",\n+                                        \"value\": \"Pacific/Funafuti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Galapagos\",\n+                                        \"value\": \"Pacific/Galapagos\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Gambier\",\n+                                        \"value\": \"Pacific/Gambier\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guadalcanal\",\n+                                        \"value\": \"Pacific/Guadalcanal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Guam\",\n+                                        \"value\": \"Pacific/Guam\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Honolulu\",\n+                                        \"value\": \"Pacific/Honolulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Johnston\",\n+                                        \"value\": \"Pacific/Johnston\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kanton\",\n+                                        \"value\": \"Pacific/Kanton\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kiritimati\",\n+                                        \"value\": \"Pacific/Kiritimati\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kosrae\",\n+                                        \"value\": \"Pacific/Kosrae\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Kwajalein\",\n+                                        \"value\": \"Pacific/Kwajalein\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Majuro\",\n+                                        \"value\": \"Pacific/Majuro\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Marquesas\",\n+                                        \"value\": \"Pacific/Marquesas\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Midway\",\n+                                        \"value\": \"Pacific/Midway\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Nauru\",\n+                                        \"value\": \"Pacific/Nauru\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Niue\",\n+                                        \"value\": \"Pacific/Niue\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Norfolk\",\n+                                        \"value\": \"Pacific/Norfolk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Noumea\",\n+                                        \"value\": \"Pacific/Noumea\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pago_Pago\",\n+                                        \"value\": \"Pacific/Pago_Pago\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Palau\",\n+                                        \"value\": \"Pacific/Palau\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pitcairn\",\n+                                        \"value\": \"Pacific/Pitcairn\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Pohnpei\",\n+                                        \"value\": \"Pacific/Pohnpei\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Ponape\",\n+                                        \"value\": \"Pacific/Ponape\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Port_Moresby\",\n+                                        \"value\": \"Pacific/Port_Moresby\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Rarotonga\",\n+                                        \"value\": \"Pacific/Rarotonga\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Saipan\",\n+                                        \"value\": \"Pacific/Saipan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Samoa\",\n+                                        \"value\": \"Pacific/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tahiti\",\n+                                        \"value\": \"Pacific/Tahiti\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tarawa\",\n+                                        \"value\": \"Pacific/Tarawa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Tongatapu\",\n+                                        \"value\": \"Pacific/Tongatapu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Truk\",\n+                                        \"value\": \"Pacific/Truk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wake\",\n+                                        \"value\": \"Pacific/Wake\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Wallis\",\n+                                        \"value\": \"Pacific/Wallis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Pacific/Yap\",\n+                                        \"value\": \"Pacific/Yap\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Poland\",\n+                                        \"value\": \"Poland\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Portugal\",\n+                                        \"value\": \"Portugal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ROK\",\n+                                        \"value\": \"ROK\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Singapore\",\n+                                        \"value\": \"Singapore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4\",\n+                                        \"value\": \"SystemV/AST4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/AST4ADT\",\n+                                        \"value\": \"SystemV/AST4ADT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6\",\n+                                        \"value\": \"SystemV/CST6\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/CST6CDT\",\n+                                        \"value\": \"SystemV/CST6CDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5\",\n+                                        \"value\": \"SystemV/EST5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/EST5EDT\",\n+                                        \"value\": \"SystemV/EST5EDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/HST10\",\n+                                        \"value\": \"SystemV/HST10\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7\",\n+                                        \"value\": \"SystemV/MST7\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/MST7MDT\",\n+                                        \"value\": \"SystemV/MST7MDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8\",\n+                                        \"value\": \"SystemV/PST8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/PST8PDT\",\n+                                        \"value\": \"SystemV/PST8PDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9\",\n+                                        \"value\": \"SystemV/YST9\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SystemV/YST9YDT\",\n+                                        \"value\": \"SystemV/YST9YDT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Turkey\",\n+                                        \"value\": \"Turkey\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UCT\",\n+                                        \"value\": \"UCT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Alaska\",\n+                                        \"value\": \"US/Alaska\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Aleutian\",\n+                                        \"value\": \"US/Aleutian\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Arizona\",\n+                                        \"value\": \"US/Arizona\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Central\",\n+                                        \"value\": \"US/Central\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/East-Indiana\",\n+                                        \"value\": \"US/East-Indiana\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Eastern\",\n+                                        \"value\": \"US/Eastern\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Hawaii\",\n+                                        \"value\": \"US/Hawaii\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Indiana-Starke\",\n+                                        \"value\": \"US/Indiana-Starke\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Michigan\",\n+                                        \"value\": \"US/Michigan\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Mountain\",\n+                                        \"value\": \"US/Mountain\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Pacific\",\n+                                        \"value\": \"US/Pacific\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US/Samoa\",\n+                                        \"value\": \"US/Samoa\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Universal\",\n+                                        \"value\": \"Universal\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"W-SU\",\n+                                        \"value\": \"W-SU\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WET\",\n+                                        \"value\": \"WET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Zulu\",\n+                                        \"value\": \"Zulu\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EST\",\n+                                        \"value\": \"EST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HST\",\n+                                        \"value\": \"HST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MST\",\n+                                        \"value\": \"MST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACT\",\n+                                        \"value\": \"ACT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AET\",\n+                                        \"value\": \"AET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AGT\",\n+                                        \"value\": \"AGT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ART\",\n+                                        \"value\": \"ART\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"AST\",\n+                                        \"value\": \"AST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BET\",\n+                                        \"value\": \"BET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BST\",\n+                                        \"value\": \"BST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CAT\",\n+                                        \"value\": \"CAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CNT\",\n+                                        \"value\": \"CNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CST\",\n+                                        \"value\": \"CST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CTT\",\n+                                        \"value\": \"CTT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"EAT\",\n+                                        \"value\": \"EAT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ECT\",\n+                                        \"value\": \"ECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IET\",\n+                                        \"value\": \"IET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IST\",\n+                                        \"value\": \"IST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"JST\",\n+                                        \"value\": \"JST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MIT\",\n+                                        \"value\": \"MIT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NET\",\n+                                        \"value\": \"NET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NST\",\n+                                        \"value\": \"NST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PLT\",\n+                                        \"value\": \"PLT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PNT\",\n+                                        \"value\": \"PNT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PRT\",\n+                                        \"value\": \"PRT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PST\",\n+                                        \"value\": \"PST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SST\",\n+                                        \"value\": \"SST\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"VST\",\n+                                        \"value\": \"VST\"\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+                                \"defaultValue\": \"UTC\",\n+                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n+                                \"displayName\": \"Time Zone\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Controlled Attribute\",\n-                                \"required\": false,\n+                                \"name\": \"Time Zone\",\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+                            \"Token\": {\n+                                \"description\": \"The token to pass to Splunk.\",\n+                                \"displayName\": \"Token\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Rate Exceeded Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Duration\": {\n-                                \"defaultValue\": \"1 min\",\n-                                \"description\": \"The amount of time to which the Maximum Rate pertains. Changing this value resets the rate counters.\",\n-                                \"displayName\": \"Time Duration\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Time Duration\",\n-                                \"required\": true,\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"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-                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\n+                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"rate\",\n-                            \"rate control\",\n-                            \"throttle\",\n-                            \"throughput\"\n+                            \"get\",\n+                            \"logs\",\n+                            \"splunk\"\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-                            },\n+                        \"type\": \"org.apache.nifi.processors.splunk.GetSplunk\",\n+                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\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+                                \"description\": \"The query that performed to produce the FlowFile.\",\n+                                \"name\": \"splunk.query\"\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+                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n+                                \"name\": \"splunk.earliest.time\"\n                             },\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+                                \"description\": \"The value of the latest time that was used when performing the query.\",\n+                                \"name\": \"splunk.latest.time\"\n                             }\n-                        ],\n-                        \"version\": \"2.0.0-M4\"\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16774,67 +16727,165 @@\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+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Input Character Set\",\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-                            \"Output Character Set\": {\n-                                \"description\": \"The name of the CharacterSet to convert to\",\n-                                \"displayName\": \"Output Character Set\",\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+                                \"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\": \"Max Size of Socket Send Buffer\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Message Delimiter\": {\n+                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n+                                \"displayName\": \"Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Output Character Set\",\n+                                \"name\": \"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+                            \"Protocol\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"TCP\",\n+                                \"description\": \"The protocol for communication.\",\n+                                \"displayName\": \"Protocol\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"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-M4\"\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\": \"Timeout\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character set\",\n-                            \"characterset\",\n-                            \"convert\",\n-                            \"text\"\n+                            \"logs\",\n+                            \"splunk\",\n+                            \"tcp\",\n+                            \"udp\"\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+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n+                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -16847,728 +16898,817 @@\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+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk server.\",\n+                                \"displayName\": \"Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Catalog Name\",\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+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Owner\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"JDBC Connection Pool\": {\n-                                \"description\": \"Specifies the JDBC Connection Pool to use in order to convert the JSON message to a SQL statement. The Connection Pool is necessary in order to determine the appropriate database column types.\",\n-                                \"displayName\": \"JDBC Connection Pool\",\n+                            \"Password\": {\n+                                \"description\": \"The password to authenticate to Splunk.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JDBC Connection Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"Port\": {\n+                                \"defaultValue\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector Port\",\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\": \"Port\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Statement Type\": {\n+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the type of SQL Statement to generate\",\n-                                \"displayName\": \"Statement Type\",\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\": \"Statement Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the table that the statement should update\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Field Names\": {\n+                            \"Security Protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"TLSv1_2\",\n+                                        \"value\": \"TLSv1_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, the Processor will attempt to translate JSON field names into the appropriate column names for the table specified. If false, the JSON field names must match the column names exactly, or the column will not be updated\",\n-                                \"displayName\": \"Translate Field Names\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Translate Field Names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Unmatched Column Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"displayName\": \"TLSv1_1\",\n+                                        \"value\": \"TLSv1_1\"\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\": \"TLSv1\",\n+                                        \"value\": \"TLSv1\"\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\": \"SSLv3\",\n+                                        \"value\": \"SSLv3\"\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\": \"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\": \"Unmatched Column Behavior\",\n+                                \"name\": \"Security Protocol\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Unmatched Field Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail\",\n-                                        \"value\": \"Fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Unmatched Field Behavior\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Token\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Update Keys\": {\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\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+                            \"character-set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"The name of the character set.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Update Keys\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"jts-quoted-identifiers\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"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+                            \"content-type\": {\n+                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n+                                \"displayName\": \"Content Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-identifiers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"content-type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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-                                \"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+                            \"host\": {\n+                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jts-quoted-table-identifiers\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"host\",\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+                            \"index\": {\n+                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"jts-sql-param-attr-prefix\",\n-                                \"required\": true,\n+                                \"name\": \"index\",\n+                                \"required\": false,\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+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"table-schema-cache-size\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"request-channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"source\": {\n+                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-type\": {\n+                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n+                                \"displayName\": \"Source Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutDatabaseRecord\",\n-                            \"org.apache.nifi.processors.standard.PutSQL\"\n+                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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\": \"FlowFiles that are sent successfully to the destination are sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if it cannot be converted into a SQL statement. Common causes include invalid JSON content or the JSON content missing a required field (if using an INSERT statement type).\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\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+                        \"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-                            \"delete\",\n-                            \"flat\",\n-                            \"insert\",\n-                            \"json\",\n-                            \"rdbms\",\n-                            \"relational\",\n-                            \"sql\",\n-                            \"update\"\n+                            \"http\",\n+                            \"logs\",\n+                            \"splunk\"\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.splunk.PutSplunkHTTP\",\n+                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the <sql>.table attribute of FlowFile that is routed to 'sql' to the name of the table that is updated by the SQL statement. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.table\"\n-                            },\n-                            {\n-                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.catalog\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n-                                \"name\": \"<sql>.args.N.type\"\n+                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\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 time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-splunk-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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                         \"propertyDescriptors\": {\n-                            \"Include Zero Record FlowFiles\": {\n+                            \"Hostname\": {\n+                                \"defaultValue\": \"localhost\",\n+                                \"description\": \"The ip address or hostname of the Splunk 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+                            \"Owner\": {\n+                                \"description\": \"The owner to pass to Splunk.\",\n+                                \"displayName\": \"Owner\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"8088\",\n+                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n+                                \"displayName\": \"HTTP Event Collector 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+                            \"Scheme\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"https\",\n+                                        \"value\": \"https\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"http\",\n+                                        \"value\": \"http\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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\": \"https\",\n+                                \"description\": \"The scheme for connecting to Splunk.\",\n+                                \"displayName\": \"Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Zero Record FlowFiles\",\n+                                \"name\": \"Scheme\",\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+                            \"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\": \"Record Reader\",\n+                                \"name\": \"Security Protocol\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Token\": {\n+                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n+                                \"displayName\": \"HTTP Event Collector Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Token\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username to authenticate to Splunk.\",\n+                                \"displayName\": \"Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Username\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-query-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n+                                \"displayName\": \"Maximum Query Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-query-size\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"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-M4\"\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+                            \"request-channel\": {\n+                                \"description\": \"Identifier of the used request channel.\",\n+                                \"displayName\": \"Splunk Request Channel\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"request-channel\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"ttl\": {\n+                                \"defaultValue\": \"1 hour\",\n+                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n+                                \"displayName\": \"Maximum Waiting Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"ttl\",\n                                 \"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-M4\"\n-                                }\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 indexing acknowledgement id provided by Splunk.\",\n+                                \"name\": \"splunk.acknowledgement.id\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"The time of the response of put request for Splunk.\",\n+                                \"name\": \"splunk.responded.at\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n+                                \"name\": \"unacknowledged\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n+                                \"name\": \"undetermined\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"convert\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n+                            \"acknowledgement\",\n+                            \"http\",\n                             \"logs\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\"\n+                            \"splunk\"\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+                        \"type\": \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\",\n+                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-py4j-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.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-M4\"\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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-confluent-platform-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"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_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ajust-immediately\": {\n+                            \"authentication-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"BASIC\",\n+                                        \"value\": \"BASIC\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\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\": \"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\": \"ajust-immediately\",\n-                                \"required\": true,\n+                                \"name\": \"authentication-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-encoding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ISO-8859-1\",\n-                                        \"value\": \"ISO-8859-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-8\",\n-                                        \"value\": \"UTF-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16\",\n-                                        \"value\": \"UTF-16\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16LE\",\n-                                        \"value\": \"UTF-16LE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\n+                            \"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\": \"character-encoding\",\n+                                \"name\": \"cache-expiration\",\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+                            \"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\": \"split-words-on-symbols\",\n+                                \"name\": \"cache-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-character-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"password\": {\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\": \"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+                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-character-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"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\": \"text-line-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"ssl-context\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"text-line-nonempty-count\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"text-word-count\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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+                                \"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\": \"false\",\n-                                \"description\": \"If enabled, will count the number of words (alphanumeric character groups bounded by whitespace) present in the incoming text. Common logical delimiters [_-.] do not bound a word unless 'Split Words on Symbols' is true.\",\n-                                \"displayName\": \"Count Words\",\n+                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"text-word-count\",\n-                                \"required\": true,\n+                                \"name\": \"username\",\n+                                \"required\": false,\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-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"character\",\n-                            \"count\",\n-                            \"line\",\n-                            \"text\",\n-                            \"word\"\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.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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of lines of text present in the FlowFile content\",\n-                                \"name\": \"text.line.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of lines of text (with at least one non-whitespace character) present in the original FlowFile\",\n-                                \"name\": \"text.line.nonempty.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of words present in the original FlowFile\",\n-                                \"name\": \"text.word.count\"\n-                            },\n-                            {\n-                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n-                                \"name\": \"text.character.count\"\n-                            }\n-                        ]\n-                    },\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-provenance-repository-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-stateful-analysis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-stateful-analysis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -17581,990 +17721,1228 @@\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"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+                            \"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\": \"fail_when_empty\",\n-                                \"required\": true,\n+                                \"name\": \"Sub-window length\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"hash_algorithm\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"MD2 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD2\",\n-                                        \"value\": \"MD2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"MD5 (16 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-1 (20 byte output) [WARNING -- Cryptographically broken] Cryptographically broken due to collisions\",\n-                                        \"displayName\": \"SHA-1\",\n-                                        \"value\": \"SHA-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-224 (28 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-224\",\n-                                        \"value\": \"SHA-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-256 (32 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-384 (48 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-384\",\n-                                        \"value\": \"SHA-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512 (64 byte output) SHA-2 family\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/224 (28 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/224\",\n-                                        \"value\": \"SHA-512/224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA-512/256 (32 byte output) SHA-2 using SHA-512 with truncated output\",\n-                                        \"displayName\": \"SHA-512/256\",\n-                                        \"value\": \"SHA-512/256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-224 (28 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-224\",\n-                                        \"value\": \"SHA3-224\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-256 (32 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-256\",\n-                                        \"value\": \"SHA3-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-384 (48 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-384\",\n-                                        \"value\": \"SHA3-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SHA3-512 (64 byte output) Keccak-based SHA3 family\",\n-                                        \"displayName\": \"SHA3-512\",\n-                                        \"value\": \"SHA3-512\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-160 (20 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-160\",\n-                                        \"value\": \"BLAKE2-160\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-256 (32 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-256\",\n-                                        \"value\": \"BLAKE2-256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-384 (48 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-384\",\n-                                        \"value\": \"BLAKE2-384\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BLAKE2-512 (64 byte output) Also known as Blake2b\",\n-                                        \"displayName\": \"BLAKE2-512\",\n-                                        \"value\": \"BLAKE2-512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA-256\",\n-                                \"description\": \"The hash algorithm to use. Note that not all of the algorithms available are recommended for use (some are provided for legacy compatibility). There are many things to consider when picking an algorithm; it is recommended to use the most secure algorithm possible.\",\n-                                \"displayName\": \"Hash Algorithm\",\n+                            \"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\": \"hash_algorithm\",\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                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"Used for flowfiles that have a hash value added\",\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\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"blake2\",\n-                            \"content\",\n-                            \"cryptography\",\n-                            \"hash\",\n-                            \"md5\",\n-                            \"sha\"\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.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.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-M4\",\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 rolling window value (sum of all the values stored).\",\n+                                \"name\": \"rolling_window_value\"\n+                            },\n+                            {\n+                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_count\"\n+                            },\n+                            {\n+                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_mean\"\n+                            },\n+                            {\n+                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_variance\"\n+                            },\n+                            {\n+                                \"description\": \"The standard deviation (positive square root of the variance) of the FlowFiles seen in the rolling window.\",\n+                                \"name\": \"rolling_window_stddev\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"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+                            \"authentication-charset\": {\n+                                \"defaultValue\": \"US-ASCII\",\n+                                \"description\": \"The charset for Basic Authentication header base64 string.\",\n+                                \"displayName\": \"Authentication Header Charset\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnScheduled Pause Time\",\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-                            \"@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+                            \"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\": \"@OnStopped Pause Time\",\n+                                \"name\": \"connection-attempt-timeout\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"@OnUnscheduled Pause Time\",\n+                                \"name\": \"input-buffer-size\",\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+                            \"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\": \"Content Size\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"CustomValidate Pause Time\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n-                                \"displayName\": \"CustomValidate Pause Time\",\n+                            \"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\": \"CustomValidate Pause Time\",\n+                                \"name\": \"max-text-message-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+                            \"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+                                \"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\": \"Fail When @OnScheduled called\",\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-M4\"\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+                                \"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+                                \"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-M4\"\n                             },\n-                            \"Fail When @OnStopped called\": {\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                                \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"auth-roles\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"basic-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"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\": \"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\": \"Fail When @OnStopped called\",\n+                                \"name\": \"basic-auth\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fail When @OnUnscheduled called\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n+                                        \"displayName\": \"Want Authentication\",\n+                                        \"value\": \"want\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n+                                        \"displayName\": \"Need Authentication\",\n+                                        \"value\": \"need\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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\": \"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\": \"Fail When @OnUnscheduled called\",\n+                                \"name\": \"client-authentication\",\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+                            \"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\": \"FlowFile Exception Class\",\n+                                \"name\": \"input-buffer-size\",\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+                            \"listen-port\": {\n+                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n+                                \"displayName\": \"Listen Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Exception Iterations\",\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                             },\n-                            \"FlowFile Failure Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n-                                \"displayName\": \"FlowFile Failure Iterations\",\n+                            \"login-service\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"See http://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/security/HashLoginService.html for detail.\",\n+                                        \"displayName\": \"HashLoginService\",\n+                                        \"value\": \"hash\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"hash\",\n+                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n+                                \"displayName\": \"Login Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FlowFile Failure Iterations\",\n-                                \"required\": true,\n+                                \"name\": \"login-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back (without penalty).\",\n-                                \"displayName\": \"FlowFile Rollback Iterations\",\n+                            \"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\": \"FlowFile Rollback Iterations\",\n+                                \"name\": \"max-binary-message-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Rollback Penalty Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of FlowFiles to roll back with penalty.\",\n-                                \"displayName\": \"FlowFile Rollback Penalty Iterations\",\n-                                \"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+                            \"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\": \"FlowFile Rollback Yield Iterations\",\n+                                \"name\": \"max-text-message-size\",\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+                            \"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\": \"FlowFile Success Iterations\",\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-M4\"\n+                                }\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+                            \"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\": \"Ignore Interrupts When Paused\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"users-properties-file\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                \"version\": \"2.0.0-M4\"\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+                            {\n+                                \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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.\",\n+                                \"displayName\": \"Kerberos Keytab\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"No FlowFile Exception Class\",\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-                            \"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+                            \"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\": \"No FlowFile Exception Iterations\",\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.KerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\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+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\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\": \"No FlowFile Skip Iterations\",\n+                                \"name\": \"Kerberos Password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"No FlowFile Yield Iterations\",\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-                            \"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+                            }\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n+                                \"requiredPermission\": \"access ticket cache\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Kerberos Principal\": {\n+                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n+                                \"displayName\": \"Kerberos Principal\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"OnTrigger Pause Time\",\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-                            \"Write Iterations\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Number of times to write to the FlowFile\",\n-                                \"displayName\": \"Write Iterations\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Write Iterations\",\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                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles processed successfully.\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to process.\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"FlowFile\",\n-                            \"debug\",\n-                            \"flow\",\n-                            \"processor\",\n-                            \"test\",\n-                            \"utility\"\n+                            \"Authentication\",\n+                            \"Cache\",\n+                            \"Credentials\",\n+                            \"Kerberos\",\n+                            \"Principal\",\n+                            \"Security\",\n+                            \"Ticket\"\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-                        \"useCases\": [],\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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hubspot-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hubspot-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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\": \"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+                        \"defaultYieldDuration\": \"10 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-                            \"bloom-filter-certainty\": {\n-                                \"defaultValue\": \"0.10\",\n-                                \"description\": \"The desired false positive probability when using the BloomFilter type. Using a value of .05 for example, guarantees a five-percent probability that the result is a false positive. The closer to 1 this value is set, the more precise the result at the expense of more storage space utilization.\",\n-                                \"displayName\": \"Bloom Filter Certainty\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bloom-filter-certainty\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-identifier\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"multiple\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"An optional expression language field that overrides the record's computed cache key. This field has an additional attribute available: ${record.hash.value}, which contains the cache key derived from dynamic properties (if set) or record fields.\",\n-                                \"displayName\": \"Cache Identifier\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"cache-identifier\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"deduplication-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Single File\",\n-                                        \"value\": \"single\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Multiple Files\",\n-                                        \"value\": \"multiple\"\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+                            \"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\": \"deduplication-strategy\",\n+                                \"name\": \"access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\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-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"filter-capacity-hint\": {\n-                                \"defaultValue\": \"25000\",\n+                            \"incremental-delay\": {\n+                                \"defaultValue\": \"30 sec\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"bloom-filter\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Filter Type\",\n-                                        \"propertyName\": \"filter-type\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\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 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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-capacity-hint\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"incremental-delay\",\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+                            \"incremental-initial-start-time\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"single\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Deduplication Strategy\",\n-                                        \"propertyName\": \"deduplication-strategy\"\n+                                        \"propertyDisplayName\": \"Incremental Loading\",\n+                                        \"propertyName\": \"is-incremental\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"filter-type\",\n-                                \"required\": true,\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-                            \"include-zero-record-flowfiles\": {\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\": \"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 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\": \"include-zero-record-flowfiles\",\n+                                \"name\": \"is-incremental\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-cache-identifier\": {\n+                            \"object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\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-                                        \"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\": \"put-cache-identifier\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-hashing-algorithm\": {\n-                                \"allowableValues\": [\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\": \"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+                                        \"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\": \"SHA-256 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\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\": \"SHA-512 cryptographic hashing algorithm.\",\n-                                        \"displayName\": \"SHA-512\",\n-                                        \"value\": \"SHA-512\"\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\": \"SHA-256\",\n-                                \"description\": \"The algorithm used to hash the cache key.\",\n-                                \"displayName\": \"Record Hashing Algorithm\",\n+                                \"description\": \"The HubSpot Object Type requested\",\n+                                \"displayName\": \"Object Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-hashing-algorithm\",\n+                                \"name\": \"object-type\",\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+                            \"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\": \"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-M4\"\n-                                }\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-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"web-client-service-provider\": {\n+                                \"description\": \"Controller service for HTTP client operations\",\n+                                \"displayName\": \"Web Client Service Provider\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"web-client-service-provider\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.web.client.provider.api.WebClientServiceProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"In case of incremental loading, the start and end timestamps of the last query time window are stored in the state. When the 'Result Limit' property is set, the paging cursor is saved after executing a request. Only the objects after the paging cursor will be retrieved. The maximum number of retrieved objects can be set in the 'Result Limit' property.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"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+                                \"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\": 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-                            \"text\",\n-                            \"unique\",\n-                            \"update\"\n+                            \"hubspot\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records written to the destination FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Sets the MIME type to application/json\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-gcp-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                                \"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-M4\"\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-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Directory Path\": {\n-                                \"defaultValue\": \"${absolute.path}\",\n-                                \"description\": \"The path to the directory the file to delete is located in.\",\n-                                \"displayName\": \"Directory Path\",\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\": \"Directory Path\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filename\": {\n+                            \"Name\": {\n                                 \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to delete.\",\n-                                \"displayName\": \"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\": \"Filename\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles, for which the file to delete did not exist, are routed to this relationship\",\n-                                \"name\": \"not found\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles, for which an existing file has been deleted, are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"All FlowFiles, for which an existing file could not be deleted, are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n                         ],\n-                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delete\",\n                             \"file\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"remove\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DeleteFile\",\n-                        \"typeDescription\": \"Deletes a file from the filesystem.\",\n-                        \"useCases\": [\n-                            {\n-                                \"configuration\": \"Retrieve a file from the filesystem, e.g. using 'ListFile' and 'FetchFile'.\\nProcess the file using any combination of processors.\\nStore the resulting file to a destination, e.g. using 'PutSFTP'.\\nUsing 'DeleteFile', delete the file from the filesystem only after the result has been stored.\\n\",\n-                                \"description\": \"Delete source file only after its processing completed\",\n-                                \"keywords\": [],\n-                                \"notes\": \"\"\n-                            }\n+                            \"gcs\",\n+                            \"resource\"\n                         ],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Human-readable reason of failure. Only available if FlowFile is routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.reason\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\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-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The class name of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.exception.class\"\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\": \"gcp-project-id\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"The message of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n-                                \"name\": \"DeleteFile.failure.exception.message\"\n+                            \"group-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on the 'group-name' label value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' label value that matches this Regex will not be fetched.\",\n+                                \"displayName\": \"Group Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"group-name-pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n-                        ]\n-                    },\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"gcp\",\n+                            \"manager\",\n+                            \"secret\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.gcp.GcpSecretManagerParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from GCP Secret Manager.  Each secret becomes a Parameter, which can be mapped to a Parameter Group by adding a GCP label named 'group-name'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -18577,136 +18955,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-                            \"Age Off Duration\": {\n-                                \"description\": \"Time interval to age off cached FlowFiles\",\n-                                \"displayName\": \"Age Off Duration\",\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\": \"Age Off Duration\",\n-                                \"required\": false,\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-M4\"\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-                            \"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+                            \"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\": \"Cache Entry Identifier\",\n+                                \"name\": \"bq.dataset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cache The Entry Identifier\": {\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-M4\"\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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Use streaming record handling strategy\",\n+                                        \"displayName\": \"STREAM\",\n+                                        \"value\": \"STREAM\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Use batching record handling strategy\",\n+                                        \"displayName\": \"BATCH\",\n+                                        \"value\": \"BATCH\"\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\": \"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\": \"Cache The Entry Identifier\",\n-                                \"required\": false,\n+                                \"name\": \"bq.transfer.type\",\n+                                \"required\": true,\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+                            \"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\": \"Distributed Cache Service\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\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\": \"FlowFile Description\",\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+                                \"description\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n+                                \"name\": \"failure\"\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+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\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-                            \"dedupe\",\n-                            \"dupe\",\n-                            \"duplicate\",\n-                            \"hash\"\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.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+                        \"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-M4\",\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+                                \"description\": \"Number of records successfully inserted\",\n+                                \"name\": \"bq.records.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -18714,363 +19160,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+                        \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\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+                                \"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-                        \"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+                            \"Google Doc Export Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Relationship selection is evenly distributed in a round robin fashion; all relationships must be available.\",\n-                                        \"displayName\": \"round robin\",\n-                                        \"value\": \"round robin\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"PDF\",\n+                                        \"value\": \"application/pdf\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Plain Text\",\n+                                        \"value\": \"text/plain\"\n                                     },\n                                     {\n-                                        \"description\": \"Relationship selection is the first available relationship without further distribution among all relationships; at least one relationship must be available.\",\n-                                        \"displayName\": \"overflow\",\n-                                        \"value\": \"overflow\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"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\": \"round robin\",\n-                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n-                                \"displayName\": \"Distribution Strategy\",\n+                                \"defaultValue\": \"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\": \"Distribution Strategy\",\n+                                \"name\": \"Google Doc Export Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Number of Relationships\": {\n-                                \"defaultValue\": \"1\",\n-                                \"description\": \"Determines the number of Relationships to which the load should be distributed\",\n-                                \"displayName\": \"Number of Relationships\",\n+                            \"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\": \"Number of Relationships\",\n+                                \"name\": \"Google Drawing Export Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Where to route flowfiles for this relationship index\",\n-                                \"name\": \"1\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"distribute\",\n-                            \"load balance\",\n-                            \"round robin\",\n-                            \"route\",\n-                            \"weighted\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": true,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.DistributeLoad\",\n-                        \"typeDescription\": \"Distributes FlowFiles to downstream processors based on a Distribution Strategy. If using the Round Robin strategy, the default is to assign each destination a weighting of 1 (evenly distributed). However, optional properties can be added to the change this; adding a property with the name '5' and value '10' means that the relationship with name '5' will be receive 10 FlowFiles in each iteration instead of 1.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n-                                \"name\": \"distribute.load.relationship\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            },\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\": \"Number of Copies\",\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-M4\"\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-M4\"\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\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\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-                            \"duplicate\",\n-                            \"load\",\n-                            \"test\"\n+                            \"drive\",\n+                            \"fetch\",\n+                            \"google\",\n+                            \"storage\"\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n-                                \"name\": \"copy.index\"\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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-                            \"Encoded Line Length\": {\n-                                \"defaultValue\": \"76\",\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-                                            \"base32\",\n-                                            \"base64\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\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-                                            \"Encode\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\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-M4\"\n+                                }\n+                            },\n+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MULTIPLE_LINES\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Line Output Mode\",\n-                                        \"propertyName\": \"Line Output Mode\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\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+                                \"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\": \"Encoded Line Length\",\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+                            \"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-                            \"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+                            \"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\": \"Encoding\",\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-M4\"\n+                                }\n                             },\n-                            \"Line Output Mode\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The encoded content will be written as a single line.\",\n-                                        \"displayName\": \"Single Line\",\n-                                        \"value\": \"SINGLE_LINE\"\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 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+                                        \"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-                                        \"dependentValues\": [\n-                                            \"base32\",\n-                                            \"base64\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Encoding\",\n-                                        \"propertyName\": \"Encoding\"\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-                                        \"dependentValues\": [\n-                                            \"Encode\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Mode\",\n-                                        \"propertyName\": \"Mode\"\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\": \"Controls the line formatting for encoded content based on selected property values.\",\n-                                \"displayName\": \"Line Output 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\": \"Line Output Mode\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Mode\": {\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.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\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-M4\"\n+                                }\n+                            },\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transform original input to encoded representation\",\n-                                        \"displayName\": \"Encode\",\n-                                        \"value\": \"Encode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Transform encoded input to original representation\",\n-                                        \"displayName\": \"Decode\",\n-                                        \"value\": \"Decode\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Encode\",\n-                                \"description\": \"Specifies whether the content should be encoded or decoded.\",\n-                                \"displayName\": \"Mode\",\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\": \"Mode\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n+                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be 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-                            \"base32\",\n-                            \"base64\",\n-                            \"decode\",\n-                            \"encode\",\n-                            \"hex\"\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.standard.EncodeContent\",\n-                        \"typeDescription\": \"Encode or decode the contents of a FlowFile using Base64, Base32, or hex encoding schemes\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19083,160 +19788,194 @@\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-                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n-                                \"displayName\": \"Batch Count\",\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\": \"batch-count\",\n-                                \"required\": true,\n+                                \"name\": \"chunked-upload-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"group-id\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n-                                \"displayName\": \"Group Identifier\",\n+                            \"chunked-upload-threshold\": {\n+                                \"defaultValue\": \"100 MB\",\n+                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks.\",\n+                                \"displayName\": \"Chunked Upload Threshold\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"group-id\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"inactive-timeout\": {\n-                                \"defaultValue\": \"30 min\",\n-                                \"description\": \"Indicates the duration after which state for an inactive group will be cleared from managed state. Group is determined as inactive if any new incoming FlowFile has not seen for a group for specified duration. Inactive Timeout must be longer than Wait Timeout. If a FlowFile arrives late after its group is already cleared, it will be treated as a brand new group, but will never match the order since expected preceding FlowFiles are already gone. The FlowFile will eventually timeout for waiting and routed to 'overtook'. To avoid this, group states should be kept long enough, however, shorter duration would be helpful for reusing the same group identifier again.\",\n-                                \"displayName\": \"Inactive Timeout\",\n+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Ignore conflict, do not change the original file.\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Replace existing file in case of conflict.\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Google Drive folder.\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"inactive-timeout\",\n+                                \"name\": \"conflict-resolution-strategy\",\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+                            \"file-name\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"initial-order\",\n+                                \"name\": \"file-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"maximum-order\": {\n-                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n-                                \"displayName\": \"Maximum Order\",\n+                            \"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\": \"maximum-order\",\n-                                \"required\": false,\n+                                \"name\": \"folder-id\",\n+                                \"required\": true,\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+                            \"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\": \"order-attribute\",\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-M4\"\n+                                }\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+                            \"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\": \"wait-timeout\",\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-M4\"\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-                        \"stateful\": {\n-                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n-                            \"scopes\": [\n-                                \"LOCAL\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n-                                \"name\": \"overtook\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n-                                \"name\": \"skipped\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n-                                \"name\": \"wait\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"description\": \"Files that could not be written to Google Drive for some reason are transferred to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"order\",\n-                            \"sort\"\n+                            \"drive\",\n+                            \"google\",\n+                            \"put\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.EnforceOrder\",\n-                        \"typeDescription\": \"Enforces expected ordering of FlowFiles that belong to the same data group within a single node.  Although PriorityAttributePrioritizer can be used on a connection to ensure that flow files going through that connection are in priority order, depending on error-handling, branching, and other flow designs, it is possible for FlowFiles to get out-of-order. EnforceOrder can be used to enforce original ordering for those FlowFiles. [IMPORTANT] In order to take effect of EnforceOrder, FirstInFirstOutPrioritizer should be used at EVERY downstream relationship UNTIL the order of FlowFiles physically get FIXED by operation such as MergeContent or being stored to the final destination.\",\n+                        \"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-M4\",\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\": \"The id of the file\",\n+                                \"name\": \"drive.id\"\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\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n-                                \"name\": \"EnforceOrder.detail\"\n+                                \"description\": \"The MIME type of the file\",\n+                                \"name\": \"mime.type\"\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\": \"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-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19244,189 +19983,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-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"If <Destination>='flowfile-attribute' then that FlowFile attribute will be set to any JSON objects that match the JsonPath.  If <Destination>='flowfile-content' then the FlowFile content will be updated to any JSON objects that match the JsonPath.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n-                                \"value\": \"A JsonPath expression\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\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 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+                            \"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\": \"Destination\",\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-M4\"\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+                            \"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\": \"Max String Length\",\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                             },\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+                            \"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-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\": \"Null Value Representation\",\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Path Not Found Behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"warn\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"skip\",\n-                                        \"value\": \"skip\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"ignore\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"Destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"Indicates how to handle missing JSON path expressions when destination is set to 'flowfile-attribute'. Selecting 'warn' will generate a warning when a JSON path expression is not found. Selecting 'skip' will omit attributes for any unmatched JSON path expressions.\",\n-                                \"displayName\": \"Path Not Found Behavior\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Not Found Behavior\",\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-                            \"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+                            \"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\": \"Return Type\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship 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-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the JsonPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"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\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"JSON\",\n-                            \"JsonPath\",\n-                            \"evaluate\"\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.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+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Acknowledgement Id of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.ackId\"\n+                            },\n+                            {\n+                                \"description\": \"Serialized size of the consumed Google Cloud PubSub message\",\n+                                \"name\": \"gcp.pubsub.messageSize\"\n+                            },\n+                            {\n+                                \"description\": \"Number of attributes the consumed PubSub message has, if any\",\n+                                \"name\": \"gcp.pubsub.attributesCount\"\n+                            },\n+                            {\n+                                \"description\": \"Timestamp value when the message was published\",\n+                                \"name\": \"gcp.pubsub.publishTime\"\n+                            },\n+                            {\n+                                \"description\": \"Other than the listed attributes, this processor may write zero or more attributes, if the original Google Cloud Publisher client added any attributes to the message while sending\",\n+                                \"name\": \"Dynamic Attributes\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19436,151 +20139,291 @@\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+                                \"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-                            \"Destination\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-content\",\n-                                        \"value\": \"flowfile-content\"\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-M4\"\n+                                }\n+                            },\n+                            \"Input Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"Maximum number of FlowFiles processed for each Processor invocation\",\n+                                \"displayName\": \"Input Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Input Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Message Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-attribute\",\n-                                        \"value\": \"flowfile-attribute\"\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\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\": \"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\": \"Destination\",\n+                                \"name\": \"Maximum Message Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Return Type\": {\n+                            \"Message Derivation Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"auto-detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"nodeset\",\n-                                        \"value\": \"nodeset\"\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\": \"string\",\n-                                        \"value\": \"string\"\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\": \"auto-detect\",\n-                                \"description\": \"Indicates the desired return type of the Xpath expressions.  Selecting 'auto-detect' will set the return type to 'nodeset' for a Destination of 'flowfile-content', and 'string' for a Destination of 'flowfile-attribute'.\",\n-                                \"displayName\": \"Return Type\",\n+                                \"defaultValue\": \"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\": \"Return Type\",\n+                                \"name\": \"Message Derivation Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Validate DTD\": {\n-                                \"allowableValues\": [\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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-M4\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n+                                        \"propertyName\": \"Message Derivation Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                                \"description\": \"The 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\": \"Validate DTD\",\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-M4\"\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+                                \"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+                                \"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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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 when the XPath cannot be evaluated against the content of the FlowFile; for instance, if the FlowFile is not valid XML, or if the Return Type is 'nodeset' and the XPath evaluates to multiple nodes\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles 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 when the XPath does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XPath is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles 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                         \"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\": \"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-                            \"XML\",\n-                            \"XPath\",\n-                            \"evaluate\"\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.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.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-M4\",\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\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\n+                            },\n+                            {\n+                                \"description\": \"Count of pubsub messages published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.count.records\"\n+                            },\n+                            {\n+                                \"description\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19588,176 +20431,128 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Destination\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Output: Indent\": {\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n-                                \"displayName\": \"Output: Indent\",\n+                            \"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\": \"Output: Indent\",\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-M4\"\n+                                }\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-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Method\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"gcp-bytes-outstanding\",\n                                 \"required\": true,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output: Omit XML Declaration\",\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-                            \"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\": \"Allow embedded Document Type Declaration in XML. This feature should be disabled to avoid XML entity expansion vulnerabilities.\",\n-                                \"displayName\": \"Allow DTD\",\n+                            \"gcp-pubsub-subscription\": {\n+                                \"description\": \"Name of the Google Cloud Pub/Sub Subscription. Example: projects/8476107443/locations/europe-west1-d/subscriptions/my-lite-subscription\",\n+                                \"displayName\": \"Subscription\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Validate DTD\",\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-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery cannot be evaluated against the content of the FlowFile.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery does not match the content of the FlowFile and the Destination is set to flowfile-content\",\n-                                \"name\": \"unmatched\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when the XQuery is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"FlowFiles 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\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\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+                            \"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.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.gcp.pubsub.lite.ConsumeGCPubSubLite\",\n+                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub Lite subscription.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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\": \"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-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19767,165 +20562,153 @@\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\": \"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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\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+                            \"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\": \"Argument Delimiter\",\n+                                \"name\": \"GCP Credentials Provider 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-gcp-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Command\",\n+                                \"name\": \"gcp-batch-bytes\",\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+                            \"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\": \"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\": \"gcp-ordering-key\",\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+                            \"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\": \"Output MIME type\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Redirect Error Stream\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n-                                \"displayName\": \"Redirect Error Stream\",\n+                            \"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\": \"Redirect Error Stream\",\n-                                \"required\": false,\n+                                \"name\": \"gcp-pubsub-publish-batch-size\",\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+                            \"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\": \"Working Directory\",\n-                                \"required\": false,\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\": \"All created FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Pub/Sub operation fails.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"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\": 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-                            \"command\",\n-                            \"external\",\n-                            \"invoke\",\n-                            \"process\",\n-                            \"script\",\n-                            \"source\"\n+                            \"gcp\",\n+                            \"google\",\n+                            \"google-cloud\",\n+                            \"lite\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"pubsub\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Executed command\",\n-                                \"name\": \"command\"\n-                            },\n-                            {\n-                                \"description\": \"Arguments of the command\",\n-                                \"name\": \"command.arguments\"\n+                                \"description\": \"ID of the pubsub message published to the configured Google Cloud PubSub topic\",\n+                                \"name\": \"gcp.pubsub.messageId\"\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\": \"Name of the Google Cloud PubSub topic the message was published to\",\n+                                \"name\": \"gcp.pubsub.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -19933,692 +20716,859 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.format\",\n-                                \"value\": \"SQL format argument to be supplied\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"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+                            \"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\": \"Database Connection Pooling Service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\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-                            \"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+                            \"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\": \"compression-format\",\n+                                \"name\": \"gcp-retry-count\",\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+                            \"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\": \"dbf-default-precision\",\n+                                \"name\": \"gcs-bucket\",\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+                            \"gcs-generation\": {\n+                                \"description\": \"The generation of the object to be deleted. If null, will use latest version of the object.\",\n+                                \"displayName\": \"Generation\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\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+                                \"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-                            \"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+                            \"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\": \"dbf-normalize\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\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+                        \"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 if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\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\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\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.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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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-                                \"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\": \"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\": \"dbf-user-logical-types\",\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-M4\"\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-                            \"esql-auto-commit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Enables or disables the auto commit functionality of the DB connection. Default value is 'true'. The default value can be used with most of the JDBC drivers and this functionality doesn't have any impact in most of the cases since this processor is used to read data. However, for some JDBC drivers such as PostgreSQL driver, it is required to disable the auto committing functionality to limit the number of result rows fetching at a time. When auto commit is enabled, postgreSQL driver loads whole result set to memory at once. This could lead for a large amount of memory usage when executing queries which fetch large data sets. More Details of this behaviour in PostgreSQL driver can be found in https://jdbc.postgresql.org//documentation/head/query.html. \",\n-                                \"displayName\": \"Set Auto Commit\",\n+                            \"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\": \"esql-auto-commit\",\n+                                \"name\": \"gcp-retry-count\",\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+                            \"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\": \"esql-fetch-size\",\n+                                \"name\": \"gcs-bucket\",\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+                            \"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\": \"esql-max-rows\",\n-                                \"required\": true,\n+                                \"name\": \"gcs-generation\",\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+                            \"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\": \"esql-output-batch-size\",\n+                                \"name\": \"gcs-key\",\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+                            \"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\": \"sql-post-query\",\n+                                \"name\": \"gcs-object-range-length\",\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+                            \"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\": \"sql-pre-query\",\n+                                \"name\": \"gcs-object-range-start\",\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+                            \"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-                            {\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+                            \"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-M4\"\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+                        \"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\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\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.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.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-M4\",\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+                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n+                                \"name\": \"filename\"\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+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\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+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\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+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.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+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\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 content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\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 content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\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 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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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\": \"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+                        \"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+                                \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"sql.args.N.type\",\n-                                \"value\": \"SQL type argument to be supplied\"\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-M4\"\n+                                }\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+                            \"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-                                \"name\": \"sql.args.N.value\",\n-                                \"value\": \"Argument to be supplied\"\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"et-initial-listing-target\",\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-                                \"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+                            \"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\": \"Database Connection Pooling Service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"window\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n+                                        \"propertyName\": \"et-initial-listing-target\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Time Window\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Max Wait Time\",\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-                            \"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+                            \"gcp-project-id\": {\n+                                \"description\": \"Google Cloud Project ID\",\n+                                \"displayName\": \"Project ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"SQL select query\",\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-                            \"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+                            \"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\": \"dbf-default-precision\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gcp-retry-count\",\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+                            \"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\": \"dbf-default-scale\",\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-                            \"dbf-user-logical-types\": {\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                                         \"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\": \"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\": \"dbf-user-logical-types\",\n+                                \"name\": \"gcs-use-generations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esql-auto-commit\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. 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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with '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\": \"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\": \"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\": \"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+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"esqlrecord-normalize\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\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\": \"esqlrecord-normalize\",\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-M4\"\n+                                }\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+                            \"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\": \"esqlrecord-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-M4\"\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+                            \"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\": \"sql-pre-query\",\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\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter. The following types are accepted: [LONGNVARCHAR: -16], [BIT: -7], [BOOLEAN: 16], [TINYINT: -6], [BIGINT: -5], [LONGVARBINARY: -4], [VARBINARY: -3], [BINARY: -2], [LONGVARCHAR: -1], [CHAR: 1], [NUMERIC: 2], [DECIMAL: 3], [INTEGER: 4], [SMALLINT: 5] [FLOAT: 6], [REAL: 7], [DOUBLE: 8], [VARCHAR: 12], [DATE: 91], [TIME: 92], [TIMESTAMP: 93], [VARCHAR: 12], [CLOB: 2005], [NCLOB: 2011]\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.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\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"gcs\",\n+                            \"google\",\n+                            \"google cloud\",\n+                            \"list\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Contains the number of rows returned in the select query\",\n-                                \"name\": \"executesql.row.count\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.duration\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"Duration of the query execution time in milliseconds\",\n-                                \"name\": \"executesql.query.executiontime\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n-                                \"name\": \"executesql.query.fetchtime\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n-                                \"name\": \"executesql.resultset.index\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\n                             },\n                             {\n-                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n-                                \"name\": \"executesql.error.message\"\n+                                \"description\": \"The number of components which make up the object.\",\n+                                \"name\": \"gcs.component.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+                                \"description\": \"The data content disposition of the object.\",\n+                                \"name\": \"gcs.content.disposition\"\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 content encoding of the object.\",\n+                                \"name\": \"gcs.content.encoding\"\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 content language of the object.\",\n+                                \"name\": \"gcs.content.language\"\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 MIME/Content-Type of the object\",\n+                                \"name\": \"mime.type\"\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 CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n+                                \"name\": \"gcs.crc32c\"\n                             },\n                             {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\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-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -20628,237 +21578,451 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"These environment variables are passed to the process spawned by this Processor\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"An environment variable name\",\n-                                \"value\": \"An environment variable value\"\n-                            },\n-                            {\n-                                \"description\": \"These arguments are supplied to the process spawned by this Processor when using the Command Arguments Strategy : Dynamic Property Arguments. <commandIndex> is a number and it will determine the order.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"command.argument.<commandIndex>\",\n-                                \"value\": \"Argument to be supplied to the command\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n+                                \"description\": \"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-                            \"Argument Delimiter\": {\n-                                \"defaultValue\": \";\",\n+                            \"File Resource Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n+                                            \"FILE_RESOURCE_SERVICE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n                                     }\n                                 ],\n-                                \"description\": \"Delimiter to use to separate arguments for a command [default: ;]. Must be a single character\",\n-                                \"displayName\": \"Argument Delimiter\",\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\": \"Argument Delimiter\",\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-M4\"\n+                                }\n                             },\n-                            \"Command Arguments\": {\n-                                \"dependencies\": [\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-M4\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Command Arguments Property\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Command Arguments Strategy\",\n-                                        \"propertyName\": \"argumentsStrategy\"\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-                                \"description\": \"The arguments to supply to the executable delimited by the ';' character.\",\n-                                \"displayName\": \"Command Arguments\",\n+                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Command Arguments\",\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-                            \"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+                            \"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\": \"Command Path\",\n+                                \"name\": \"gcs-bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore STDIN\": {\n+                            \"gcs-content-disposition-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\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-                                \"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+                                \"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\": \"Ignore STDIN\",\n+                                \"name\": \"gcs-content-disposition-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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Attribute Length\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-content-type\",\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+                            \"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\": \"Output Destination Attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gcs-key\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output MIME Type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute. This property is ignored if 'Output Destination Attribute' is set.\",\n-                                \"displayName\": \"Output MIME Type\",\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\": \"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+                                    },\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+                                \"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\": \"Output MIME Type\",\n+                                \"name\": \"gcs-object-acl\",\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+                            \"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\": \"Working Directory\",\n+                                \"name\": \"gcs-object-crc32c\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"argumentsStrategy\": {\n+                            \"gcs-overwrite-object\": {\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\": \"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\": \"argumentsStrategy\",\n+                                \"name\": \"gcs-overwrite-object\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"gcs-server-side-encryption-key\": {\n+                                \"description\": \"An AES256 Encryption Key (encoded in base64) for server-side encryption of the object.\",\n+                                \"displayName\": \"Server Side Encryption Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n+                                \"displayName\": \"GZIP Compression Enabled\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"gzip.content.enabled\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. 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-M4\"\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-                        \"restricted\": true,\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"readsAttributes\": [\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+                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"name\": \"filename\"\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+                                \"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 if the Google Cloud Storage operation fails.\",\n+                                \"name\": \"failure\"\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+                                \"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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"command\",\n-                            \"command execution\",\n-                            \"execute\",\n-                            \"stream\"\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.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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the command executed\",\n-                                \"name\": \"execution.command\"\n+                                \"description\": \"Bucket of the object.\",\n+                                \"name\": \"gcs.bucket\"\n                             },\n                             {\n-                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n-                                \"name\": \"execution.command.args\"\n+                                \"description\": \"Name of the object.\",\n+                                \"name\": \"gcs.key\"\n                             },\n                             {\n-                                \"description\": \"The exit status code returned from executing the command\",\n-                                \"name\": \"execution.status\"\n+                                \"description\": \"Size of the object.\",\n+                                \"name\": \"gcs.size\"\n                             },\n                             {\n-                                \"description\": \"Any error messages returned from executing the command\",\n-                                \"name\": \"execution.error\"\n+                                \"description\": \"Data cache control of the object.\",\n+                                \"name\": \"gcs.cache.control\"\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+                                \"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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -20866,190 +22030,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\": \"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-                                \"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+                            \"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\": \"Destination\",\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-M4\"\n+                                }\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+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Grok Expression\",\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-                            \"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+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\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 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\": \"Keep Empty Captures\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\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+                            {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"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\": \"Maximum Buffer 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-M4\"\n+                                }\n                             },\n-                            \"Named captures only\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Only store named captures from grok\",\n-                                \"displayName\": \"Named captures only\",\n+                            \"operationKey\": {\n+                                \"defaultValue\": \"${operationKey}\",\n+                                \"description\": \"The unique identifier of the Vision operation.\",\n+                                \"displayName\": \"GCP Operation Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Named captures only\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"operationKey\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\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\": \"FlowFiles are routed to this relationship when no provided Grok Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"The job is currently still being processed\",\n+                                \"name\": \"running\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship when the Grok Expression is successfully evaluated and the FlowFile is modified as a result\",\n-                                \"name\": \"matched\"\n+                                \"description\": \"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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"delimit\",\n-                            \"extract\",\n-                            \"grok\",\n-                            \"log\",\n-                            \"parse\",\n-                            \"text\"\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.standard.ExtractGrok\",\n-                        \"typeDescription\": \"Evaluates one or more Grok Expressions against the content of a FlowFile, adding the results as attributes or replacing the content of the FlowFile with a JSON notation of the matched content\",\n+                        \"type\": \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an Google Vision operation.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n-                                \"name\": \"grok.XXX\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21058,97 +22231,111 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\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-M4\"\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-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile's record schema cannot be extracted from the configured input format, the FlowFile will be routed to this relationship\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"record\",\n-                            \"schema\",\n-                            \"text\",\n-                            \"xml\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n-                                \"name\": \"record.error.message\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n-                                \"name\": \"avro.schema\"\n+                                \"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-standard-nar\",\n+                        \"artifact\": \"nifi-gcp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21156,374 +22343,427 @@\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-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n-                                \"displayName\": \"Character Set\",\n+                            \"gcp-credentials-provider-service\": {\n+                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n+                                \"displayName\": \"GCP Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n+                                \"name\": \"gcp-credentials-provider-service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"json-payload\": {\n+                                \"defaultValue\": \"{\\n    \\\"requests\\\": [{\\n        \\\"image\\\": {\\n            \\\"source\\\": {\\n                \\\"imageUri\\\": \\\"gs://${gcs.bucket}/${filename}\\\"\\n            }\\n        },\\n        \\\"features\\\": [{\\n            \\\"type\\\": \\\"${vision-feature-type}\\\",\\n            \\\"maxResults\\\": 4\\n        }]\\n    }],\\n    \\\"outputConfig\\\": {\\n        \\\"gcsDestination\\\": {\\n            \\\"uri\\\": \\\"gs://${output-bucket}/${filename}/\\\"\\n        },\\n        \\\"batchSize\\\": 2\\n    }\\n}\",\n+                                \"description\": \"JSON request for AWS Machine Learning services. The Processor will use FlowFile content for the request when this property is not specified.\",\n+                                \"displayName\": \"JSON Payload\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"json-payload\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Canonical Equivalence\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n-                                \"displayName\": \"Enable Canonical Equivalence\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Canonical Equivalence\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"output-bucket\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Case-insensitive Matching\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n-                                \"displayName\": \"Enable Case-insensitive Matching\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Case-insensitive Matching\",\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-M4\",\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-M4\"\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\": \"19c5be0\"\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-                            \"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+                            \"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.kerberos.KerberosCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"domain\": {\n+                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n+                                \"displayName\": \"Domain\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable DOTALL Mode\",\n-                                \"required\": true,\n+                                \"name\": \"domain\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Literal Parsing of the Pattern\": {\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\": \"Indicates that Metacharacters and escape characters should be given no special meaning.\",\n-                                \"displayName\": \"Enable Literal Parsing of the Pattern\",\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 Literal Parsing of the Pattern\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Multiline Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"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+                            \"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\": \"Enable Multiline Mode\",\n+                                \"name\": \"hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable Unicode Predefined Character Classes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\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+                            \"password\": {\n+                                \"description\": \"The password used for authentication.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Enable Unicode Predefined Character Classes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Enable Unicode-aware Case Folding\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n-                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n+                            \"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\": \"Enable Unicode-aware Case Folding\",\n+                                \"name\": \"port\",\n                                 \"required\": true,\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+                            \"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\": \"Enable Unix Lines Mode\",\n+                                \"name\": \"share\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Enable named group support\": {\n+                            \"smb-dialect\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"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\": \"Enable named group support\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Enable repeating capture group\": {\n-                                \"allowableValues\": [\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\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+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n+                                    },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\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+                                \"defaultValue\": \"AUTO\",\n+                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n+                                \"displayName\": \"SMB Dialect\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Include Capture Group 0\",\n+                                \"name\": \"smb-dialect\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"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\": \"Maximum Buffer Size\",\n+                                \"name\": \"timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Capture Group Length\": {\n-                                \"defaultValue\": \"1024\",\n-                                \"description\": \"Specifies the maximum number of characters a given capture group value can have. Any characters beyond the max will be truncated.\",\n-                                \"displayName\": \"Maximum Capture Group Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Capture Group Length\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Permit Whitespace and Comments in Pattern\": {\n+                            \"use-encryption\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"In this mode, whitespace is ignored, and embedded comments starting with # are ignored until the end of a line.  Can also be specified via the embedded flag (?x).\",\n-                                \"displayName\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"description\": \"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\": \"Permit Whitespace and Comments in Pattern\",\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-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship when no provided Regular Expression matches the content of the FlowFile\",\n-                                \"name\": \"unmatched\"\n-                            },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-smb-client-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Regular Expression\",\n-                            \"Text\",\n-                            \"evaluate\",\n-                            \"extract\",\n-                            \"regex\"\n+                            \"samba, smb, cifs, files\"\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-                        \"useCases\": [],\n+                        \"type\": \"org.apache.nifi.services.smb.SmbjClientProviderService\",\n+                        \"typeDescription\": \"Provides access to SMB Sessions with shared authentication credentials.\",\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -21532,625 +22772,507 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"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 this Processor should commit the offsets to Kafka after receiving messages. Typically, this value should be 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 PublishKafka in order to provide Exactly Once semantics.\",\n+                                \"displayName\": \"Commit Offsets\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Commit Offsets\",\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+                            \"Group ID\": {\n+                                \"description\": \"Kafka Consumer Group Identifier corresponding to Kafka group.id property\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": false,\n+                                \"name\": \"Group ID\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"Header Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Character encoding applied when reading Kafka Record Header values and writing FlowFile attributes\",\n+                                \"displayName\": \"Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Distributed Cache Service\",\n+                                \"name\": \"Header Encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Max Length To Put In Attribute\": {\n-                                \"defaultValue\": \"256\",\n-                                \"description\": \"If routing the cache value to an attribute of the FlowFile (by setting the \\\"Put Cache Value in attribute\\\" property), the number of characters put to the attribute value will be at most this amount. This is important because attributes are held in memory and large attributes will quickly cause out of memory issues. If the output goes longer than this value, it will be truncated to fit. Consider making this smaller if able.\",\n-                                \"displayName\": \"Max Length To Put In Attribute\",\n+                            \"Header Name Pattern\": {\n+                                \"description\": \"Regular Expression Pattern applied to Kafka Record Header Names for selecting Header Values to be written as FlowFile attributes\",\n+                                \"displayName\": \"Header Name Pattern\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Length To Put In Attribute\",\n+                                \"name\": \"Header Name Pattern\",\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+                            \"Kafka Connection Service\": {\n+                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n+                                \"displayName\": \"Kafka Connection Service\",\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.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+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Kafka Connection Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"Key Attribute Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leave the file as-is\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\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\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n-                                        \"displayName\": \"Move File\",\n-                                        \"value\": \"Move File\"\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\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\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\": \"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\": \"utf-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"Output Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Encoding for value of configured FlowFile attribute containing Kafka Record Key.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n+                                \"name\": \"Key Attribute Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Mode\": {\n+                            \"Key Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\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\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                                \"defaultValue\": \"byte-array\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"Output Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies how to represent the Kafka Record Key in the output FlowFile\",\n+                                \"displayName\": \"Key Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Key Format\",\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+                            \"Key Record Reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"Key Format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record Key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Key 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-M4\"\n+                                }\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Max Uncommitted Time\": {\n+                                \"defaultValue\": \"1 s\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\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\": \"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\": \"Create Directory\",\n-                                \"required\": false,\n+                                \"name\": \"Max Uncommitted Time\",\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+                            \"Message Demarcator\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"DEMARCATOR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Since KafkaConsumer receives messages in batches, this Processor has 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\": \"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\": \"Message Demarcator\",\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+                            \"Output Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n+                                        \"displayName\": \"Use Content as Value\",\n+                                        \"value\": \"USE_VALUE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n+                                        \"displayName\": \"Use Wrapper\",\n+                                        \"value\": \"USE_WRAPPER\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"USE_VALUE\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\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\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n-                                \"displayName\": \"Move Destination Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Move Destination Directory\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Output Strategy\",\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-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Proxy Type\": {\n+                            \"Processing Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"Write one FlowFile for each Kafka Record consumed\",\n+                                        \"displayName\": \"FLOW_FILE\",\n+                                        \"value\": \"FLOW_FILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Write one FlowFile for each batch of Kafka Records consumed (optionally grouped by Kafka key)\",\n+                                        \"displayName\": \"DEMARCATOR\",\n+                                        \"value\": \"DEMARCATOR\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"description\": \"Write one FlowFile containing multiple Kafka Records consumed and processed with Record Reader and Record Writer\",\n+                                        \"displayName\": \"RECORD\",\n+                                        \"value\": \"RECORD\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"FLOW_FILE\",\n+                                \"description\": \"Strategy for processing Kafka Records and writing serialized output to FlowFiles\",\n+                                \"displayName\": \"Processing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Processing Strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote File\": {\n-                                \"description\": \"The fully qualified filename on the remote system\",\n-                                \"displayName\": \"Remote File\",\n+                            \"Record Reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for incoming Kafka messages\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Remote File\",\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-M4\"\n+                                }\n                             },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n+                            \"Record Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"RECORD\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Processing Strategy\",\n+                                        \"propertyName\": \"Processing Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                                \"description\": \"The Record Writer to use in order to serialize the outgoing FlowFiles\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\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-M4\"\n+                                }\n                             },\n-                            \"Use Compression\": {\n+                            \"Separate By Key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Message Demarcator\",\n+                                        \"propertyName\": \"Message Demarcator\"\n+                                    }\n+                                ],\n+                                \"description\": \"When this property is enabled, 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\": \"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\": \"Separate By Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"Topic Format\": {\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\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Topic is a regular expression according to the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\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+                                \"defaultValue\": \"names\",\n+                                \"description\": \"Specifies whether the Topics provided are a comma separated list of names or a single regular expression\",\n+                                \"displayName\": \"Topic Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"Topic Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"Topics\": {\n+                                \"description\": \"The name or pattern of the Kafka Topics from which the Processor consumes Kafka Records. More than one can be supplied if comma separated.\",\n+                                \"displayName\": \"Topics\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Topics\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset found for the consumer group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\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\": \"latest\",\n+                                \"description\": \"Automatic offset configuration applied when no previous consumer offset found corresponding to Kafka auto.offset.reset property\",\n+                                \"displayName\": \"Auto Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ftp-use-utf8\",\n+                                \"name\": \"auto.offset.reset\",\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-M4\"\n-                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\",\n-                            \"org.apache.nifi.processors.standard.GetSFTP\",\n-                            \"org.apache.nifi.processors.standard.PutFTP\",\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                            \"org.apache.nifi.kafka.processors.PublishKafka\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"FlowFiles containing one or more serialized Kafka Records\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n-                                \"name\": \"comms.failure\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n-                                \"name\": \"not.found\"\n-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"fetch\",\n-                            \"files\",\n-                            \"ftp\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.kafka.processors.ConsumeKafka\",\n+                        \"typeDescription\": \"Consumes messages from Apache Kafka Consumer API. The complementary NiFi processor for sending messages is PublishKafka. The Processor supports consumption of Kafka messages, optionally interpreted as NiFi records. Please note that, at this time (in read record mode), the Processor assumes that all records that are retrieved from a given partition have the same schema. For this mode, 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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The hostname or IP address from which the file was pulled\",\n-                                \"name\": \"ftp.remote.host\"\n+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n-                                \"name\": \"ftp.remote.port\"\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The name of the remote file that was pulled\",\n-                                \"name\": \"ftp.remote.filename\"\n+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n-                                \"name\": \"filename\"\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\": \"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 offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\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 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-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -22158,883 +23280,525 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            },\n-                            {\n-                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"write filesystem\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"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+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Completion Strategy\": {\n+                            \"Failure 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+                                        \"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\": \"Deletes the original file from the file system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\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\": \"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+                                \"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\": \"Completion Strategy\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File to Fetch\": {\n-                                \"defaultValue\": \"${absolute.path}/${filename}\",\n-                                \"description\": \"The fully-qualified filename of the file to fetch from the file system\",\n-                                \"displayName\": \"File to Fetch\",\n+                            \"FlowFile Attribute Header Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the pattern will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n+                                \"displayName\": \"FlowFile Attribute Header Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"File to Fetch\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"FlowFile Attribute Header Pattern\",\n+                                \"required\": false,\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-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n+                            \"Header Encoding\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"propertyDisplayName\": \"FlowFile Attribute Header Pattern\",\n+                                        \"propertyName\": \"FlowFile Attribute Header Pattern\"\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\": \"For any attribute that is added as a Kafka Record Header, this property indicates the Character Encoding to use for serializing the headers.\",\n+                                \"displayName\": \"Header Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when file not found\",\n+                                \"name\": \"Header Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log level when permission denied\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRACE\",\n-                                        \"value\": \"TRACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DEBUG\",\n-                                        \"value\": \"DEBUG\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INFO\",\n-                                        \"value\": \"INFO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WARN\",\n-                                        \"value\": \"WARN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ERROR\",\n-                                        \"value\": \"ERROR\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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+                            \"Kafka Connection Service\": {\n+                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n+                                \"displayName\": \"Kafka Connection Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log level when permission denied\",\n+                                \"name\": \"Kafka Connection Service\",\n                                 \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Kafka Key\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Key to use for the Message. If not specified, the FlowFile attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n+                                \"displayName\": \"Kafka Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Kafka Key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Conflict Strategy\": {\n+                            \"Kafka Key Attribute Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The existing destination file should remain intact. The newly ingested file should be moved to the destination directory but be renamed to a random filename\",\n-                                        \"displayName\": \"Rename\",\n-                                        \"value\": \"Rename\"\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n                                     },\n                                     {\n-                                        \"description\": \"The newly ingested file should replace the existing file in the Destination Directory\",\n-                                        \"displayName\": \"Replace File\",\n-                                        \"value\": \"Replace File\"\n+                                        \"description\": \"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 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+                                        \"description\": \"The key will not be added as an Attribute\",\n+                                        \"displayName\": \"Do Not Add Key as Attribute\",\n+                                        \"value\": \"do-not-add\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"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+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\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\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Kafka Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Move Conflict Strategy\",\n+                                \"name\": \"Kafka Key Attribute Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Move Destination Directory\": {\n-                                \"description\": \"The directory to the move the original file to once it has been fetched from the file system. This property is ignored unless the Completion Strategy is set to \\\"Move File\\\". If the directory does not exist, it will be created.\",\n-                                \"displayName\": \"Move Destination Directory\",\n+                            \"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\": \"Move Destination Directory\",\n+                                \"name\": \"Message Demarcator\",\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-                            },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n-                                \"name\": \"permission.denied\"\n                             },\n-                            {\n-                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"fetch\",\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.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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"Message Key Field\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\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-                        \"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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Ciphers Allowed\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Key Field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Completion Strategy\": {\n+                            \"Publish 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+                                        \"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\": \"Deletes the original file from the remote system\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"Delete File\"\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\": \"None\",\n-                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n-                                \"displayName\": \"Completion Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Completion Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n+                                \"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\": \"Connection Timeout\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Record Key Writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\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\": \"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\": \"Create Directory\",\n+                                \"name\": \"Record Key Writer\",\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+                                \"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-M4\"\n+                                }\n                             },\n-                            \"Disable Directory Listing\": {\n+                            \"Record Metadata Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"FROM_RECORD\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"FROM_PROPERTIES\"\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+                                \"defaultValue\": \"FROM_PROPERTIES\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Disable Directory Listing\",\n-                                \"required\": false,\n+                                \"name\": \"Record Metadata Strategy\",\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+                            \"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\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully-qualified hostname or IP address of the host to fetch the data from\",\n-                                \"displayName\": \"Hostname\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                            \"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-                            \"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-                            \"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\": \"Move Destination Directory\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Record Writer\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"Topic Name\": {\n+                                \"description\": \"Name of the Kafka Topic to which the Processor publishes Kafka Records\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"Topic Name\",\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\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n-                                    },\n+                            \"Transactional ID Prefix\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transactions Enabled\",\n+                                        \"propertyName\": \"Transactions Enabled\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"description\": \"Specifies the KafkaProducer config transactional.id will be a generated UUID and will be prefixed with the configured string.\",\n+                                \"displayName\": \"Transactional ID Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Transactional ID Prefix\",\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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n+                            \"Transactions 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\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"Specifies whether to 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\": \"Transactions Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"Transactions Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Strict Host Key Checking\": {\n+                            \"acks\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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 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-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"defaultValue\": \"all\",\n+                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka Client acks property.\",\n+                                \"displayName\": \"Delivery Guarantee\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Strict Host Key Checking\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Use Compression\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Specifies the compression strategy for records sent to Kafka. Corresponds to Kafka Client compression.type property.\",\n+                                \"displayName\": \"Compression Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\n+                            \"max.request.size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The maximum size of a request in bytes. Corresponds to Kafka Client max.request.size property.\",\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+                            \"partition\": {\n+                                \"description\": \"Specifies the Kafka Partition destination for Records.\",\n+                                \"displayName\": \"Partition\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Username\",\n-                                \"required\": true,\n+                                \"name\": \"partition\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"fetchfiletransfer-notfound-loglevel\": {\n+                            \"partitioner.class\": {\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+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"FATAL\",\n-                                        \"value\": \"FATAL\"\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\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"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+                                \"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 Client partitioner.class property.\",\n+                                \"displayName\": \"Partitioner Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"fetchfiletransfer-notfound-loglevel\",\n+                                \"name\": \"partitioner.class\",\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-M4\"\n-                                }\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                         \"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.kafka.processors.ConsumeKafka\"\n                         ],\n                         \"sideEffectFree\": false,\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\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\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\": \"FlowFiles for which all content was sent to Kafka.\",\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-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"sftp\",\n-                            \"source\"\n+                            \"Apache\",\n+                            \"Kafka\",\n+                            \"Message\",\n+                            \"PubSub\",\n+                            \"Put\",\n+                            \"Record\",\n+                            \"Send\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\",\n+                            \"logs\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.kafka.processors.PublishKafka\",\n+                        \"typeDescription\": \"Sends the contents of a FlowFile as either a message or as individual records to Apache Kafka using the Kafka Producer API. The messages to send may be individual FlowFiles, may be delimited using a user-specified delimiter (such as a new-line), or may be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafka.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-groovyx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-groovyx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23042,154 +23806,145 @@\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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attribute Matching Strategy\",\n-                                \"required\": true,\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-                            \"Filter Mode\": {\n+                            \"groovyx-failure-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n-                                        \"displayName\": \"Retain\",\n-                                        \"value\": \"Retain\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"rollback\",\n+                                        \"value\": \"rollback\"\n                                     },\n                                     {\n-                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n-                                        \"displayName\": \"Remove\",\n-                                        \"value\": \"Remove\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"transfer to failure\",\n+                                        \"value\": \"transfer to failure\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Retain\",\n-                                \"description\": \"Specifies the strategy to apply on filtered attributes. Either 'Remove' or 'Retain' only the matching attributes.\",\n-                                \"displayName\": \"Filter Mode\",\n+                                \"defaultValue\": \"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\": \"Filter Mode\",\n+                                \"name\": \"groovyx-failure-strategy\",\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+                            \"groovyx-script-body\": {\n+                                \"description\": \"Body of script to execute. Only one of Script File or Script Body may be used\",\n+                                \"displayName\": \"Script Body\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Filtered Attributes\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"groovyx-script-body\",\n+                                \"required\": false,\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+                            \"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\": \"Filtered Attributes Pattern\",\n-                                \"required\": true,\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-                        \"sideEffectFree\": true,\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\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+                            \"groovy\",\n+                            \"groovyx\",\n+                            \"script\"\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+                        \"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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-salesforce-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23202,571 +23957,740 @@\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+                            \"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\": \"flatten-json-character-set\",\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-M4\"\n+                                }\n                             },\n-                            \"flatten-json-pretty-print-json\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n-                                \"displayName\": \"Pretty Print JSON\",\n+                            \"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\": \"flatten-json-pretty-print-json\",\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-                            \"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+                            \"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\": \"flatten-json-return-type\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"flatten-json-separator\": {\n-                                \"defaultValue\": \".\",\n-                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n-                                \"displayName\": \"Separator\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"flatten-json-separator\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"flatten-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flattens every objects into a single level json\",\n-                                        \"displayName\": \"normal\",\n-                                        \"value\": \"normal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects and keep arrays format\",\n-                                        \"displayName\": \"keep arrays\",\n-                                        \"value\": \"keep arrays\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Conforms to MongoDB dot notation to update also nested documents\",\n-                                        \"displayName\": \"dot notation\",\n-                                        \"value\": \"dot notation\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flattens every objects except arrays which contain only primitive types (strings, numbers, booleans and null)\",\n-                                        \"displayName\": \"keep primitive arrays\",\n-                                        \"value\": \"keep primitive arrays\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"keep arrays\",\n-                                \"description\": \"Specifies how json should be flattened/unflattened\",\n-                                \"displayName\": \"Flatten Mode\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"flatten-mode\",\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ignore-reserved-characters\",\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-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n-                                \"name\": \"success\"\n-                            },\n+                        \"readsAttributes\": [\n                             {\n-                                \"description\": \"Files that cannot be flattened/unflattened go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n+                                \"name\": \"objectType\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"org.apache.nifi.processors.salesforce.QuerySalesforceObject\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"enrichment\"\n+                                \"description\": \"For FlowFiles created as a result of a successful execution.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n-                                \"name\": \"original\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"enrich\",\n-                            \"fork\",\n-                            \"join\",\n-                            \"record\"\n+                            \"put\",\n+                            \"salesforce\",\n+                            \"sobject\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ForkEnrichment\",\n-                        \"typeDescription\": \"Used in conjunction with the JoinEnrichment processor, this processor is responsible for adding the attributes that are necessary for the JoinEnrichment processor to perform its function. Each incoming FlowFile will be cloned. The original FlowFile will have appropriate attributes added and then be transferred to the 'original' relationship. The clone will have appropriate attributes added and then be routed to the 'enrichment' relationship. See the documentation for the JoinEnrichment processor (and especially its Additional Details) for more information on how these Processors work together and how to perform enrichment tasks in NiFi by using these Processors.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"description\": \"The error message returned by Salesforce.\",\n+                                \"name\": \"error.message\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-salesforce-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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\": \"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+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"fork-mode\": {\n-                                \"allowableValues\": [\n+                            \"age-delay\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Generated records will be the elements of the array\",\n-                                        \"displayName\": \"Extract\",\n-                                        \"value\": \"extract\"\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\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+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"split\",\n-                                \"description\": \"Specifies the forking mode of the processor\",\n-                                \"displayName\": \"Mode\",\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\": \"fork-mode\",\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-                            \"include-parent-fields\": {\n+                            \"age-field\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n+                                \"displayName\": \"Age Field\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"age-field\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-zero-record-files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"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+                                \"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\": \"include-parent-fields\",\n+                                \"name\": \"create-zero-record-files\",\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+                            \"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+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"field-names\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n+                                \"displayName\": \"Field Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"field-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"initial-age-filter\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    },\n+                                    {\n+                                        \"propertyDisplayName\": \"Age Field\",\n+                                        \"propertyName\": \"age-field\"\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\": \"record-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.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n+                            \"query-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Provide query by properties.\",\n+                                        \"displayName\": \"Property Based Query\",\n+                                        \"value\": \"property-based-query\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Provide custom SOQL query.\",\n+                                        \"displayName\": \"Custom Query\",\n+                                        \"value\": \"custom-query\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"property-based-query\",\n+                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n+                                \"displayName\": \"Query Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"query-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"read-timeout\": {\n+                                \"defaultValue\": \"15 s\",\n+                                \"description\": \"Maximum time allowed for reading a response from the Salesforce REST API\",\n+                                \"displayName\": \"Read Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Service used for writing records returned from the Salesforce REST API\",\n                                 \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"record-writer\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"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+                                            \"property-based-query\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Type\",\n+                                        \"propertyName\": \"query-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Salesforce sObject to be queried\",\n+                                \"displayName\": \"sObject Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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-                        \"sideEffectFree\": true,\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\": \"In case a FlowFile generates an error during the fork operation, it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n-                                \"name\": \"fork\"\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\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"array\",\n-                            \"content\",\n-                            \"event\",\n-                            \"fork\",\n-                            \"record\",\n-                            \"stream\"\n+                            \"query\",\n+                            \"salesforce\",\n+                            \"sobject\",\n+                            \"soql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The generated FlowFile will have a 'record.count' attribute indicating the number of records that were written to the FlowFile.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The MIME Type indicated by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"Sets the total number of records in the FlowFile.\",\n+                                \"name\": \"total.record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-3-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-3-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Specifies an attribute on generated FlowFiles defined by the Dynamic Property's key and value. If Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles.\",\n+                                \"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\": \"Generated FlowFile attribute name\",\n-                                \"value\": \"Generated FlowFile attribute value\"\n+                                \"name\": \"The name of a Kafka configuration property.\",\n+                                \"value\": \"The value of a given Kafka configuration property.\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"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+                            \"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\": \"Batch Size\",\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-M4\"\n+                                }\n+                            },\n+                            \"ack.wait.time\": {\n+                                \"defaultValue\": \"5 s\",\n+                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that the service will wait for a response from Kafka.\\nIf Kafka does not acknowledge the message within this time period, the service will throw an exception.\\n\",\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-                            \"Data Format\": {\n+                            \"bootstrap.servers\": {\n+                                \"description\": \"Comma-separated list of Kafka Bootstrap Servers in the format host:port. Corresponds to Kafka bootstrap.servers property\",\n+                                \"displayName\": \"Bootstrap Servers\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"default.api.timeout.ms\": {\n+                                \"defaultValue\": \"60 s\",\n+                                \"description\": \"Default timeout for Kafka client operations. Mapped to Kafka default.api.timeout.ms. The Kafka request.timeout.ms property is derived from half of the configured timeout\",\n+                                \"displayName\": \"Client Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"default.api.timeout.ms\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"isolation.level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"Read records from Kafka only after the producer has committed a transaction.\",\n+                                        \"displayName\": \"Read Committed\",\n+                                        \"value\": \"read_committed\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Text\",\n-                                        \"value\": \"Text\"\n+                                        \"description\": \"Read records from Kafka as soon as the produced has sent the record, regardless of transaction status.\",\n+                                        \"displayName\": \"Read Uncommitted\",\n+                                        \"value\": \"read_uncommitted\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Text\",\n-                                \"description\": \"Specifies whether the data should be Text or Binary\",\n-                                \"displayName\": \"Data Format\",\n+                                \"defaultValue\": \"read_committed\",\n+                                \"description\": \"Specifies how the service should handle transaction isolation levels when communicating with Kafka.\\nThe uncommited option 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.\\nThe committed option configures the service to not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the\\nconsumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\\nCorresponds to Kafka isolation.level property.\\n\",\n+                                \"displayName\": \"Transaction Isolation Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Data Format\",\n+                                \"name\": \"isolation.level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"File Size\": {\n-                                \"defaultValue\": \"0B\",\n-                                \"description\": \"The size of the file that will be used\",\n-                                \"displayName\": \"File Size\",\n+                            \"max.block.ms\": {\n+                                \"defaultValue\": \"5 s\",\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\\nentire 'send' call. Corresponds to Kafka max.block.ms property\\n\",\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.poll.records\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"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\": \"File Size\",\n+                                \"name\": \"max.poll.records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Unique FlowFiles\": {\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\": \"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+                                \"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\": \"Unique FlowFiles\",\n+                                \"name\": \"sasl.mechanism\",\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+                            \"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\": \"SASL Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"character-set\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"sasl.password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"SASL Username\",\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+                                \"name\": \"sasl.username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mime-type\": {\n-                                \"description\": \"Specifies the value to set for the \\\"mime.type\\\" attribute.\",\n-                                \"displayName\": \"Mime Type\",\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\": \"mime-type\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"\",\n-                                \"name\": \"success\"\n+                                \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"generate\",\n-                            \"load\",\n-                            \"random\",\n-                            \"test\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type of the output if the 'Mime Type' property is set\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.kafka.service.Kafka3ConnectionService\",\n+                        \"typeDescription\": \"Provides and manages connections to Kafka Brokers for producer or consumer operations.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-windows-event-log-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-windows-event-log-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -23774,2300 +24698,1942 @@\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                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"null-percentage\": {\n-                                \"defaultValue\": \"0\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Nullable Fields\",\n-                                        \"propertyName\": \"nullable-fields\"\n-                                    }\n-                                ],\n-                                \"description\": \"The percent probability (0-100%) that a generated value for any nullable field will be null. Set this property to zero to have no null values, or 100 to have all null values.\",\n-                                \"displayName\": \"Null Value Percentage\",\n+                            \"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\": \"null-percentage\",\n+                                \"name\": \"channel\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nullable-fields\",\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"number-of-records\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"maxBuffer\",\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"maxQueue\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"schema-text\",\n-                                \"required\": false,\n+                                \"name\": \"query\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n+                                \"description\": \"Relationship for successfully consumed events.\",\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                         \"tags\": [\n-                            \"fake\",\n-                            \"generate\",\n-                            \"random\",\n-                            \"test\"\n+                            \"event\",\n+                            \"ingest\",\n+                            \"windows\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Will set a MIME type value of application/xml.\",\n                                 \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-mongodb-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-                        \"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+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\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-                            \"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-M4\"\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+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"mongo-uri\": {\n+                                \"description\": \"MongoURI, typically of the form: mongodb://host1[:port1][,host2[:port2],...]\",\n+                                \"displayName\": \"Mongo URI\",\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\": \"mongo-uri\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n+                            \"mongo-write-concern\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\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\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\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\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"Deprecated.  Use of \\\"JOURNALED\\\" is preferred\",\n+                                        \"displayName\": \"FSYNCED\",\n+                                        \"value\": \"FSYNCED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"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\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"Deprecated.  Use of \\\"W2\\\" is preferred\",\n+                                        \"displayName\": \"REPLICA_ACKNOWLEDGED\",\n+                                        \"value\": \"REPLICA_ACKNOWLEDGED\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\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\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\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\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\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\": \"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\": \"ACKNOWLEDGED\",\n+                                \"description\": \"The write concern to use\",\n+                                \"displayName\": \"Write Concern\",\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-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-                                \"dynamic\": false,\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-                            \"gen-table-fetch-partition-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The number of result rows to be fetched by each generated SQL statement. The total number of rows in the table divided by the partition size gives the number of SQL statements (i.e. FlowFiles) generated. A value of zero indicates that a single FlowFile is to be generated whose SQL statement will fetch all rows in the table.\",\n-                                \"displayName\": \"Partition Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gen-table-fetch-partition-size\",\n+                                \"name\": \"mongo-write-concern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gen-table-output-flowfile-on-zero-results\": {\n+                            \"ssl-client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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\": \"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\": \"gen-table-output-flowfile-on-zero-results\",\n-                                \"required\": true,\n+                                \"name\": \"ssl-client-auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"ssl-context-service\": {\n+                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"ssl-context-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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-                        ],\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+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"database\",\n-                            \"fetch\",\n-                            \"generate\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"select\",\n-                            \"sql\"\n+                            \"mongo\",\n+                            \"mongodb\",\n+                            \"service\"\n                         ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n-                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the 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-M4\",\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-mongodb-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n+                            \"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\": \"Connection Mode\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"Connection Timeout\",\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-M4\"\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-                            \"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+                            \"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\": \"Data Timeout\",\n-                                \"required\": true,\n+                                \"name\": \"mongo-lookup-value-field\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Delete Original\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Infer from Result\",\n+                                        \"value\": \"infer\"\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\": \"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\": \"Delete Original\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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\": \"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-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\": \"File Filter Regex\",\n+                                \"name\": \"schema-registry\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\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\": \"Hostname\",\n-                                \"required\": true,\n+                                \"name\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Http Proxy Password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-version\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\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\": \"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\": \"Communications Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\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\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\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\": \"Ignore Dotted Files\",\n+                                \"name\": \"Compress Events\",\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+                            \"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\": \"Internal Buffer Size\",\n-                                \"required\": 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-                            \"Max Selects\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to pull in a single connection\",\n-                                \"displayName\": \"Max Selects\",\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\": \"Max Selects\",\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-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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-                            \"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+                            \"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\": \"Path Filter Regex\",\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-M4\"\n+                                }\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+                            \"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\": \"Polling Interval\",\n+                                \"name\": \"record-sink-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-M4\"\n+                                }\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"21\",\n-                                \"description\": \"The port that the remote system is listening on for file transfers\",\n-                                \"displayName\": \"Port\",\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\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\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-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Port\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"s2s-transport-protocol\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\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+                                \"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\": \"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+                                \"name\": \"s2s-transport-protocol\",\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+                            }\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Search Recursively\": {\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\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\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\": \"Search Recursively\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n+                            \"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\": \"Transfer Mode\",\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-M4\"\n+                                }\n                             },\n-                            \"Use Natural Ordering\": {\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\": \"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\": \"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\": \"Use Natural Ordering\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"Username\",\n-                                \"displayName\": \"Username\",\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\": \"Username\",\n-                                \"required\": true,\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-M4\"\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-                            \"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+                            \"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\": \"follow-symlink\",\n-                                \"required\": true,\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-                            \"ftp-use-utf8\": {\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\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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\": \"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\": \"ftp-use-utf8\",\n+                                \"name\": \"s2s-transport-protocol\",\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-M4\"\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-                                \"name\": \"success\"\n-                            }\n-                        ],\n+                        \"restricted\": 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-                            \"FTP\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"remote\",\n-                            \"retrieve\",\n-                            \"source\"\n+                            \"bulletin\",\n+                            \"site\",\n+                            \"site to site\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n-                                \"name\": \"file.lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-                        \"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+                            \"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\": \"File Filter\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\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 hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\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\": \"Ignore Hidden Files\",\n+                                \"name\": \"Compress Events\",\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+                            \"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\": \"Input Directory\",\n+                                \"name\": \"Destination URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Keep Source File\": {\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+                            \"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-M4\"\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\": \"If true, the file is not deleted after it has been copied to the Content Repository; this causes the file to be picked up continually and is useful for testing purposes.  If not keeping original NiFi will need write permissions on the directory it is pulling from otherwise it will ignore the file.\",\n-                                \"displayName\": \"Keep Source File\",\n+                                \"description\": \"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\": \"Keep Source File\",\n+                                \"name\": \"include-null-values\",\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+                            \"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\": \"Maximum File Age\",\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-M4\"\n+                                }\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+                            \"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\": \"Maximum File Size\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"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\": \"Minimum File Age\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"s2s-http-proxy-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"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\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-port\",\n+                                \"required\": false,\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+                            \"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\": \"Path Filter\",\n+                                \"name\": \"s2s-http-proxy-username\",\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+                            \"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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"s2s-metrics-format\": {\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+                                    },\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\": \"Polling Interval\",\n+                                \"name\": \"s2s-metrics-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\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\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not to pull files from subdirectories\",\n-                                \"displayName\": \"Recurse Subdirectories\",\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\": \"Recurse Subdirectories\",\n+                                \"name\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.FetchFile\",\n-                            \"org.apache.nifi.processors.standard.PutFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"ingress\",\n-                            \"input\",\n-                            \"local\",\n-                            \"source\"\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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 send sensitive details contained in Provenance events to any external system.\",\n+                                \"requiredPermission\": \"export nifi details\"\n+                            }\n+                        ],\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-                                \"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+                            \"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\": \"Connection Timeout\",\n+                                \"name\": \"Batch Size\",\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+                            \"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\": \"Data Timeout\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Delete Original\": {\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\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n-                                \"displayName\": \"Delete Original\",\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\": \"Delete Original\",\n+                                \"name\": \"Compress Events\",\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+                            \"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\": \"File Filter Regex\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"Host Key File\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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-                            \"Hostname\": {\n-                                \"description\": \"The fully qualified hostname or IP address of the remote system\",\n-                                \"displayName\": \"Hostname\",\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\": \"Hostname\",\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-                            \"Http Proxy Password\": {\n-                                \"description\": \"Http Proxy Password\",\n-                                \"displayName\": \"Http Proxy Password\",\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\": \"Http Proxy Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Platform\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\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\": \"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\": \"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-M4\"\n+                                }\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"include-null-values\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\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\": \"Ignore Dotted Files\",\n+                                \"name\": \"include-null-values\",\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+                            \"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\": \"Key Exchange Algorithms Allowed\",\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-M4\"\n+                                }\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+                            \"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 Selects\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Message Authentication Codes Allowed\": {\n-                                \"description\": \"A comma-separated list of Message Authentication Codes allowed for SFTP connections. Leave unset to allow all. Available options are: hmac-md5, hmac-md5-96, hmac-md5-96-etm@openssh.com, hmac-md5-etm@openssh.com, hmac-ripemd160, hmac-ripemd160-96, hmac-ripemd160-etm@openssh.com, hmac-ripemd160@openssh.com, hmac-sha1, hmac-sha1-96, hmac-sha1-96@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-256-etm@openssh.com, hmac-sha2-512, hmac-sha2-512-etm@openssh.com\",\n-                                \"displayName\": \"Message Authentication Codes Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"s2s-http-proxy-hostname\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"s2s-http-proxy-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+                            \"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\": \"Path Filter Regex\",\n+                                \"name\": \"s2s-http-proxy-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+                            \"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\": \"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+                                \"name\": \"s2s-http-proxy-username\",\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+                            \"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\": \"Proxy Host\",\n+                                \"name\": \"s2s-prov-task-event-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\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\": \"Proxy Port\",\n+                                \"name\": \"s2s-prov-task-event-filter-exclude\",\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+                            \"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\": \"Proxy Type\",\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-                            \"Remote Path\": {\n-                                \"description\": \"The path on the remote system from which to pull or push files\",\n-                                \"displayName\": \"Remote Path\",\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\": \"Remote Path\",\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-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n+                            \"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\": \"Search Recursively\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Send Keep Alive On Timeout\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"Strict Host Key Checking\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Use Compression\",\n-                                \"required\": true,\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-                            \"Use Natural Ordering\": {\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+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n-                                \"displayName\": \"Use Natural Ordering\",\n+                                \"defaultValue\": \"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\": \"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\": \"s2s-transport-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\n+                            \"start-position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"follow-symlink\",\n+                                \"name\": \"start-position\",\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-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.PutSFTP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n-                                \"name\": \"success\"\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-                        \"supportsBatching\": false,\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+                            \"lineage\",\n+                            \"provenance\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"tracking\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n-                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the remote server\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The date and time that the source file was last modified\",\n-                                \"name\": \"file.lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric owner id of the source file\",\n-                                \"name\": \"file.owner\"\n-                            },\n-                            {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\n-                            },\n-                            {\n-                                \"description\": \"The read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n-                            },\n-                            {\n-                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.reporting.SiteToSiteProvenanceReportingTask\",\n+                        \"typeDescription\": \"Publishes Provenance events using the Site To Site protocol.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"Additional HTTP Methods\": {\n-                                \"description\": \"A comma-separated list of non-standard HTTP Methods that should be allowed\",\n-                                \"displayName\": \"Additional HTTP Methods\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Additional HTTP Methods\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Allow DELETE\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP DELETE Method\",\n-                                \"displayName\": \"Allow DELETE\",\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 DELETE\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\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+                            \"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\": \"Allow GET\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Allow HEAD\",\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-                            \"Allow OPTIONS\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Allow HTTP OPTIONS Method\",\n-                                \"displayName\": \"Allow OPTIONS\",\n+                            \"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\": \"Allow OPTIONS\",\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-                            \"Allow POST\": {\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\": \"Allow HTTP POST Method\",\n-                                \"displayName\": \"Allow POST\",\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 POST\",\n+                                \"name\": \"Compress Events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Allow PUT\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Allow HTTP PUT Method\",\n-                                \"displayName\": \"Allow PUT\",\n+                            \"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\": \"Allow PUT\",\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-                            \"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+                            \"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\": \"Allowed Paths\",\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-                            \"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+                            \"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\": \"Client Authentication\",\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Default URL Character Set\",\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-                            \"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 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\": \"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.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"HTTP Protocols\": {\n+                            \"include-null-values\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\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\": \"HTTP Protocols\",\n+                                \"name\": \"include-null-values\",\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+                            \"record-writer\": {\n+                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Listening Port\": {\n-                                \"defaultValue\": \"80\",\n-                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n-                                \"displayName\": \"Listening Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Listening Port\",\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-M4\"\n+                                }\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+                            \"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\": \"Maximum Threads\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-hostname\",\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+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"s2s-http-proxy-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.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\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+                            \"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\": \"container-queue-size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-port\",\n+                                \"required\": false,\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+                            \"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\": \"multipart-read-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"s2s-http-proxy-username\",\n+                                \"required\": false,\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+                            \"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\": \"multipart-request-max-size\",\n+                                \"name\": \"s2s-transport-protocol\",\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+                            }\n+                        },\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"history\",\n+                            \"metrics\",\n+                            \"site\",\n+                            \"site to site\",\n+                            \"status\"\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+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-network-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"FIELDS_DESTINATION\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile JSON content\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Parsed data routes as flowfile attributes\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the parser are written to the FlowFile content or a FlowFile attribute; if using flowfile-attribute, fields will be populated as attributes. If set to flowfile-content, the netflowv5 field will be converted into a flat JSON object.\",\n+                                \"displayName\": \"Parsed fields destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"parameters-to-attributes\",\n-                                \"required\": false,\n+                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Optionally read if packets are received from UDP datagrams.\",\n+                                \"name\": \"udp.port\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n+                                \"description\": \"Any FlowFile that is successfully parsed as a netflowv5 data will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be parsed as a netflowv5 message will be transferred to this Relationship without any attributes being added\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original raw content\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"http\",\n-                            \"https\",\n-                            \"ingress\",\n-                            \"listen\",\n-                            \"request\",\n-                            \"web service\"\n+                            \"attributes\",\n+                            \"byte\",\n+                            \"datagram\",\n+                            \"netflow\",\n+                            \"network\",\n+                            \"packet\",\n+                            \"v5\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\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+                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n+                                \"name\": \"netflowv5.header.*\"\n                             },\n                             {\n-                                \"description\": \"For requests with Content-Type \\\"multipart/form-data\\\", the count of all parts is recorded into this attribute.\",\n-                                \"name\": \"http.multipart.fragments.total.number\"\n+                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n+                                \"name\": \"netflowv5.record.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-network-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -26075,131 +26641,241 @@\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+                            \"PCAP Max Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Maximum size of each output PCAP file. PCAP packets larger than the configured size result in routing FlowFiles to the failure relationship.\",\n+                                \"displayName\": \"PCAP Max Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n-                                \"required\": false,\n+                                \"name\": \"PCAP Max Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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-                            \"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+                            {\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The individual PCAP 'segments' of the original PCAP 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\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"Capture\",\n+                            \"Network\",\n+                            \"PCAP\",\n+                            \"Packet\",\n+                            \"Splitter\",\n+                            \"TShark\",\n+                            \"TcpDump\",\n+                            \"WinDump\",\n+                            \"Wireshark\",\n+                            \"sniffers\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.network.pcap.SplitPCAP\",\n+                        \"typeDescription\": \"Splits one pcap file into multiple pcap files based on a maximum size.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The reason the FlowFile was sent to the failure relationship.\",\n+                                \"name\": \"error.reason\"\n+                            },\n+                            {\n+                                \"description\": \"All split PCAP FlowFiles produced from the same parent PCAP 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 PCAP FlowFiles that were created from a single parent PCAP FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split PCAP FlowFiles generated from the parent PCAP FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent PCAP FlowFile\",\n+                                \"name\": \"segment.original.filename\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-web-client-provider-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-web-client-provider-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"HTTP Context Map\",\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.http.HttpContextMap\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Status Code\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\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+                            \"redirect-handling-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"FOLLOWED\",\n+                                        \"value\": \"FOLLOWED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IGNORED\",\n+                                        \"value\": \"IGNORED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FOLLOWED\",\n+                                \"description\": \"Handling strategy for responding to HTTP 301 or 302 redirects received with a Location header\",\n+                                \"displayName\": \"Redirect Handling Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"redirect-handling-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Listening port of the server. Used for provenance event.\",\n-                                \"name\": \"http.server.port\"\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-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n-                                \"name\": \"http.subject.dn\"\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-                        \"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+                        \"providedApiImplementations\": [\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+                                \"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-M4\"\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-                            \"egress\",\n-                            \"http\",\n-                            \"https\",\n-                            \"response\",\n-                            \"web service\"\n+                            \"Client\",\n+                            \"HTTP\",\n+                            \"Web\"\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-                        \"useCases\": [],\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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-update-attribute-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-update-attribute-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -26207,932 +26883,1105 @@\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"config-body\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Delete Attributes Expression\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"config-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Stateful Variables Initial Value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"config-strategy\": {\n+                            \"Store State\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Do not store state\",\n+                                        \"value\": \"Do not store state\"\n                                     },\n                                     {\n-                                        \"description\": \"Use config together with default NiFi MIME Types.\",\n-                                        \"displayName\": \"Merge\",\n-                                        \"value\": \"Merge\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Store state locally\",\n+                                        \"value\": \"Store state locally\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Preset\",\n-                                \"description\": \"Select the loading strategy for MIME Type configuration to be used.\",\n-                                \"displayName\": \"Config Strategy\",\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\": \"config-strategy\",\n+                                \"name\": \"Store State\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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\": \"If true will pass the filename to Tika to aid in detection.\",\n-                                \"displayName\": \"Use Filename In Detection\",\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\": \"use-filename-in-detection\",\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 FlowFiles are routed to success\",\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+                        \"supportsDynamicProperties\": true,\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+                            \"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.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-M4\",\n-                        \"writesAttributes\": [\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-                                \"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+                                \"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-                                \"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+                                \"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-                                \"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+                                \"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-M4\",\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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-framework-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kafka-2-6-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                                \"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_ALLOWED\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Connection Timeout\": {\n+                            \"ack.wait.time\": {\n                                 \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Maximum time to wait for initial socket connection to the HTTP URL.\",\n-                                \"displayName\": \"Connection Timeout\",\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\": \"Connection Timeout\",\n+                                \"name\": \"ack.wait.time\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"HTTP Method\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"HTTP URL\",\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-                            \"HTTP/2 Disabled\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"True\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"False\"\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4\",\n+                                        \"value\": \"lz4\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"False\",\n-                                \"description\": \"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+                                \"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\": \"HTTP/2 Disabled\",\n+                                \"name\": \"compression.type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Body Enabled\": {\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-M4\"\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+                                \"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-M4\"\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+                            \"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-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\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\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n-                                \"displayName\": \"Request Body Enabled\",\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\": \"Request Body Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Chunked Transfer-Encoding Enabled\": {\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-M4\"\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+                            {\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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"kafka\",\n+                            \"record\",\n+                            \"sink\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n+                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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+                            \"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\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enable sending HTTP requests with the Transfer-Encoding Header set to chunked, and disable sending the Content-Length Header. Transfer-Encoding applies to the body in HTTP/1.1 requests as described in RFC 7230 Section 3.3.1\",\n-                                \"displayName\": \"Request Chunked Transfer-Encoding Enabled\",\n+                                \"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\": \"Request Chunked Transfer-Encoding Enabled\",\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-                            \"Request Content-Encoding\": {\n+                            \"auto.offset.reset\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Content encoding not applied during transmission\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n                                     },\n                                     {\n-                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n-                                        \"displayName\": \"GZIP\",\n-                                        \"value\": \"GZIP\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DISABLED\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\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\": \"HTTP Content-Encoding applied to request body during transmission. The receiving server must support the selected encoding to avoid request failures.\",\n-                                \"displayName\": \"Request Content-Encoding\",\n+                                \"defaultValue\": \"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\": \"Request Content-Encoding\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Content-Type\": {\n-                                \"defaultValue\": \"${mime.type}\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"POST\",\n-                                            \"PATCH\",\n-                                            \"PUT\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"HTTP Method\",\n-                                        \"propertyName\": \"HTTP Method\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"Request Content-Type\",\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-                            \"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+                            \"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\": \"Request Date Header Enabled\",\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-                            \"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+                            \"header-name-regex\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Request Username\",\n-                                        \"propertyName\": \"Request Username\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Enable Digest Authentication on HTTP requests with Username and Password credentials as described in RFC 7616.\",\n-                                \"displayName\": \"Request Digest Authentication Enabled\",\n+                                \"description\": \"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\": \"Request Digest Authentication Enabled\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Failure Penalization Enabled\": {\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\": \"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\": \"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\": \"Request Failure Penalization Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"honor-transactions\",\n+                                \"required\": true,\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+                            \"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\": \"Request Header Attributes Pattern\",\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-M4\"\n+                                }\n                             },\n-                            \"Request Multipart Form-Data Filename Enabled\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\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\": \"true\",\n+                                \"defaultValue\": \"utf-8\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n-                                        \"propertyName\": \"Request Multipart Form-Data Name\"\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\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+                                \"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\": \"Request Multipart Form-Data Filename Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"key-attribute-encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Request Multipart Form-Data Name\": {\n+                            \"key-format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n+                                        \"displayName\": \"String\",\n+                                        \"value\": \"string\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n+                                        \"displayName\": \"Byte Array\",\n+                                        \"value\": \"byte-array\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"byte-array\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"USE_WRAPPER\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Request Body Enabled\",\n-                                        \"propertyName\": \"Request Body Enabled\"\n+                                        \"propertyDisplayName\": \"Output Strategy\",\n+                                        \"propertyName\": \"output-strategy\"\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+                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n+                                \"displayName\": \"Key Format\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Request Multipart Form-Data Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-format\",\n+                                \"required\": true,\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+                            \"key-record-reader\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"record\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Key Format\",\n+                                        \"propertyName\": \"key-format\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n+                                \"displayName\": \"Key Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Request OAuth2 Access Token Provider\",\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.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"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+                                \"name\": \"max-uncommit-offset-wait\",\n                                 \"required\": false,\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+                            \"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\": \"Request Username\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Response Body Attribute Name\",\n+                                \"name\": \"max.poll.records\",\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+                            \"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\": \"Response Body Attribute Size\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Body Ignored\": {\n+                            \"output-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n-                                \"displayName\": \"Response Body Ignored\",\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\": \"Response Body Ignored\",\n+                                \"name\": \"output-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"Response Cache 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-M4\"\n+                                }\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+                            \"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\": \"Response Cache Size\",\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-M4\"\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-                            \"Response Cookie Strategy\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ACCEPT_ALL\",\n-                                        \"value\": \"ACCEPT_ALL\"\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\": \"DISABLED\",\n-                                \"description\": \"Strategy for accepting and persisting HTTP cookies. Accepting cookies enables persistence across multiple requests.\",\n-                                \"displayName\": \"Response Cookie 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\": \"Response Cookie Strategy\",\n+                                \"name\": \"sasl.mechanism\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"sasl.password\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"Response FlowFile Naming 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-                            \"Response Generation Required\": {\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\": \"Enable generation and transfer of a FlowFile to the Response relationship regardless of HTTP response received.\",\n-                                \"displayName\": \"Response Generation Required\",\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\": \"Response Generation Required\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Header Request Attributes Enabled\": {\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+                                \"sensitive\": false\n+                            },\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\": \"Enable adding HTTP response headers as attributes to FlowFiles transferred to the Original relationship.\",\n-                                \"displayName\": \"Response Header Request Attributes Enabled\",\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\": \"Response Header Request Attributes Enabled\",\n-                                \"required\": false,\n+                                \"name\": \"security.protocol\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Response Redirects Enabled\": {\n+                            \"separate-by-key\": {\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\": \"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\": \"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\": \"Response Redirects Enabled\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\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+                                \"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-M4\"\n                                 }\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-                                \"dynamic\": 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+                            \"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\": \"Socket Read Timeout\",\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-                            \"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+                            \"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\": \"Socket Write Timeout\",\n+                                \"name\": \"topic_type\",\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 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-M4\"\n-                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n+                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Original\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n-                                \"name\": \"Failure\"\n-                            },\n-                            {\n-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n-                                \"name\": \"Retry\"\n-                            },\n-                            {\n-                                \"description\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n-                                \"name\": \"Response\"\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-                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 400 an 499.\",\n-                                \"name\": \"No Retry\"\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"http\",\n-                            \"https\",\n-                            \"rest\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Record\",\n+                            \"Topic\",\n+                            \"avro\",\n+                            \"csv\",\n+                            \"json\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\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+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The DN of the remote server\",\n-                                \"name\": \"invokehttp.remote.dn\"\n+                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.class\"\n+                                \"description\": \"The partition of the topic the records are from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"invokehttp.java.exception.message\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\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 topic records are from\",\n+                                \"name\": \"kafka.topic\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -27140,3775 +27989,3502 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\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-                                \"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-M4\"\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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Join Strategy\": {\n+                            \"Commit Offsets\": {\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\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Wrapper\",\n-                                \"description\": \"Specifies how to join the two FlowFiles into a single FlowFile\",\n-                                \"displayName\": \"Join Strategy\",\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\": \"Join Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Commit Offsets\",\n+                                \"required\": false,\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+                            \"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\": \"Maximum number of Bins\",\n+                                \"name\": \"Communications Timeout\",\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-                                \"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-M4\"\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+                            \"auto.offset.reset\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n+                                        \"displayName\": \"earliest\",\n+                                        \"value\": \"earliest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Automatically reset the offset to the latest offset\",\n+                                        \"displayName\": \"latest\",\n+                                        \"value\": \"latest\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"latest\",\n+                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n+                                \"displayName\": \"Offset Reset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"auto.offset.reset\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"SQL\": {\n-                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n+                            \"aws.profile.name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SQL\"\n+                                            \"AWS_MSK_IAM\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Join Strategy\",\n-                                        \"propertyName\": \"Join Strategy\"\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"description\": \"The SQL SELECT statement to evaluate. Expression Language may be provided, but doing so may result in poorer performance. Because this Processor is dealing with two FlowFiles at a time, it's also important to understand how attributes will be referenced. If both FlowFiles have an attribute with the same name but different values, the Expression Language will resolve to the value provided by the 'enrichment' FlowFile.\",\n-                                \"displayName\": \"SQL\",\n+                                \"description\": \"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\": \"SQL\",\n-                                \"required\": true,\n+                                \"name\": \"aws.profile.name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 min\",\n-                                \"description\": \"Specifies the maximum amount of time to wait for the second FlowFile once the first arrives at the processor, after which point the first FlowFile will be routed to the 'timeout' relationship.\",\n-                                \"displayName\": \"Timeout\",\n+                            \"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\": \"Timeout\",\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-                            \"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+                            \"group.id\": {\n+                                \"description\": \"A Group ID is used to identify consumers that are within the same consumer group. Corresponds to Kafka's 'group.id' property.\",\n+                                \"displayName\": \"Group ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-precision\",\n-                                \"required\": false,\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-                            \"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+                            \"header-name-regex\": {\n+                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n+                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"header-name-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n-                                \"name\": \"timeout\"\n-                            },\n-                            {\n-                                \"description\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n-                                \"name\": \"joined\"\n-                            },\n-                            {\n-                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\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-                                \"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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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-                            {\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-                            \"list-db-include-count\": {\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\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n-                                \"displayName\": \"Include Count\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-include-count\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-refresh-interval\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The amount of time to elapse before resetting the processor state, thereby causing all current tables to be listed. During this interval, the processor may continue to run, but tables that have already been listed will not be re-listed. However new/added tables will be listed as the processor runs. A value of zero means the state will never be automatically reset, the user must Clear State manually.\",\n-                                \"displayName\": \"Refresh Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-refresh-interval\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-catalog\": {\n-                                \"description\": \"The name of a catalog from which to list database tables. The name must match the catalog name as it is stored in the database. If the property is not set, the catalog name will not be used to narrow the search for tables. If the property is set to an empty string, tables without a catalog will be listed.\",\n-                                \"displayName\": \"Catalog\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"list-db-tables-catalog\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"list-db-tables-db-connection\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                                \"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\": \"list-db-tables-db-connection\",\n+                                \"name\": \"honor-transactions\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"kerberos-user-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n                                     \"version\": \"2.0.0-M4\"\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-                                \"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-                            \"database\",\n-                            \"jdbc\",\n-                            \"list\",\n-                            \"sql\",\n-                            \"table\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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-                            \"Connection Mode\": {\n+                            \"key-attribute-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\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\": \"Passive\",\n-                                        \"value\": \"Passive\"\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\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n-                                \"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.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\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+                                \"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\": \"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+                                \"name\": \"key-attribute-encoding\",\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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"max-uncommit-offset-wait\": {\n+                                \"defaultValue\": \"1 secs\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Commit Offsets\",\n+                                        \"propertyName\": \"Commit Offsets\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Dotted Files\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n+                                \"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\": \"Internal Buffer Size\",\n+                                \"name\": \"max-uncommit-offset-wait\",\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+                            \"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\": \"Path Filter Regex\",\n+                                \"name\": \"max.poll.records\",\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+                            \"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\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"message-demarcator\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Proxy Host\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-header-encoding\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\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\": \"Proxy Port\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"sasl.mechanism\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\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\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"GSSAPI\",\n+                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n+                                \"displayName\": \"SASL Mechanism\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"sasl.mechanism\",\n+                                \"required\": true,\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+                            \"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\": \"Remote Path\",\n+                                \"name\": \"sasl.password\",\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+                                \"sensitive\": true\n                             },\n-                            \"Search Recursively\": {\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\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Transfer Mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Binary\",\n-                                        \"value\": \"Binary\"\n-                                    },\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\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\": \"Transfer Mode\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\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-                                        \"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+                            \"sasl.username\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"PLAIN\",\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-initial-listing-target\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\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+                                \"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\": \"et-time-window\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\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\": \"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\": \"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\": \"follow-symlink\",\n+                                \"name\": \"security.protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ftp-use-utf8\": {\n+                            \"separate-by-key\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"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+                                \"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\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"separate-by-key\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. 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\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"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-M4\"\n-                                }\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-                            \"target-system-timestamp-precision\": {\n+                            \"topic_type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n+                                        \"displayName\": \"names\",\n+                                        \"value\": \"names\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n+                                        \"displayName\": \"pattern\",\n+                                        \"value\": \"pattern\"\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\": \"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\": \"target-system-timestamp-precision\",\n+                                \"name\": \"topic_type\",\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+                                \"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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"files\",\n-                            \"ftp\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"source\"\n+                            \"2.6\",\n+                            \"Consume\",\n+                            \"Get\",\n+                            \"Ingest\",\n+                            \"Ingress\",\n+                            \"Kafka\",\n+                            \"PubSub\",\n+                            \"Topic\"\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.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-M4\",\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+                                \"description\": \"The number of messages written if more than one\",\n+                                \"name\": \"kafka.count\"\n                             },\n                             {\n-                                \"description\": \"The numeric group id of the source file\",\n-                                \"name\": \"file.group\"\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 read/write/execute permissions of the source file\",\n-                                \"name\": \"file.permissions\"\n+                                \"description\": \"The offset of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.offset\"\n                             },\n                             {\n-                                \"description\": \"The number of bytes in the source file\",\n-                                \"name\": \"file.size\"\n+                                \"description\": \"The timestamp of the message in the partition of the topic.\",\n+                                \"name\": \"kafka.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n-                                \"name\": \"file.lastModifiedTime\"\n+                                \"description\": \"The partition of the topic the message or message bundle is from\",\n+                                \"name\": \"kafka.partition\"\n                             },\n                             {\n-                                \"description\": \"The name of the file on the FTP Server\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The topic the message or message bundle is from\",\n+                                \"name\": \"kafka.topic\"\n                             },\n                             {\n-                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n-                                \"name\": \"path\"\n+                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n+                                \"name\": \"kafka.tombstone\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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\": \"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-                            \"File Filter\": {\n-                                \"defaultValue\": \"[^\\\\.].*\",\n-                                \"description\": \"Only files whose names match the given regular expression will be picked up\",\n-                                \"displayName\": \"File Filter\",\n+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\n+                            \"Record Metadata Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\n+                                \"defaultValue\": \"Use Configured Values\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_WRAPPER\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n+                                \"displayName\": \"Record Metadata Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Hidden Files\",\n+                                \"name\": \"Record Metadata Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Include File Attributes\": {\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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n+                                        \"displayName\": \"Best Effort\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"Include File Attributes\",\n+                                \"name\": \"acks\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory\": {\n-                                \"description\": \"The input directory from which files to pull files\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"attribute-name-regex\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"USE_VALUE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"publish-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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attribute-name-regex\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"aws.profile.name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"AWS_MSK_IAM\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n+                                \"displayName\": \"AWS Profile Name\",\n+                                \"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+                            },\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\": \"Input Directory\",\n+                                \"name\": \"bootstrap.servers\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Input Directory Location\": {\n+                            \"compression.type\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\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+                                        \"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\": \"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+                                \"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\": \"Input Directory Location\",\n+                                \"name\": \"compression.type\",\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+                            \"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\": \"Maximum File Age\",\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-M4\"\n+                                }\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+                            \"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\": \"Maximum File Size\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"Minimum File Age\",\n+                                \"name\": \"max.request.size\",\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+                            \"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\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"name\": \"message-header-encoding\",\n+                                \"required\": false,\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Path Filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"message-key-field\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Recurse Subdirectories\": {\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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\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\": \"Recurse Subdirectories\",\n-                                \"required\": true,\n+                                \"name\": \"partitioner.class\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"publish-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\": \"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\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\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\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"publish-strategy\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-node-identifier\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-key-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-M4\"\n+                                }\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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-writer\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\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\": \"et-time-window\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"sasl.mechanism\": {\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\": \"General Security Services API for Kerberos authentication\",\n+                                        \"displayName\": \"GSSAPI\",\n+                                        \"value\": \"GSSAPI\"\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\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\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\": \"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\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing 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\": \"listing-strategy\",\n+                                \"name\": \"sasl.mechanism\",\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+                            \"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\": \"max-listing-time\",\n+                                \"name\": \"sasl.password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"sasl.token.auth\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\n+                                    }\n+                                ],\n+                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n+                                \"displayName\": \"Token Authentication\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"sasl.token.auth\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"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+                            \"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\": \"max-operation-time\",\n+                                \"name\": \"sasl.username\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-performance-metrics\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"security.protocol\",\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+                            \"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+                                \"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-M4\"\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+                            \"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+                                \"sensitive\": false\n+                            },\n+                            \"transactional-id-prefix\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Use Transactions\",\n+                                        \"propertyName\": \"use-transactions\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"description\": \"When Use Transaction is set to true, KafkaProducer config 'transactional.id' will be a generated UUID and will be prefixed with this string.\",\n+                                \"displayName\": \"Transactional Id Prefix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"target-system-timestamp-precision\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"transactional-id-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"track-performance\": {\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\": \"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+                                \"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\": \"track-performance\",\n+                                \"name\": \"use-transactions\",\n                                 \"required\": true,\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+                            \"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\": \"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\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\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-                            \"file\",\n-                            \"filesystem\",\n-                            \"get\",\n-                            \"ingest\",\n-                            \"list\",\n-                            \"source\"\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.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.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-M4\",\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-                            },\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+                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n+                                \"name\": \"msg.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-kafka-2-6-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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\": \"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\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Ciphers Allowed\": {\n-                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n-                                \"displayName\": \"Ciphers Allowed\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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+                            \"Failure Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be routed to the failure relationship.\",\n+                                        \"displayName\": \"Route to Failure\",\n+                                        \"value\": \"Route to Failure\"\n+                                    },\n+                                    {\n+                                        \"description\": \"When unable to publish records to Kafka, the FlowFile will be placed back on the queue so that it will be retried. For flows where FlowFile ordering is important, this strategy can be used along with ensuring that the each processor uses only a single Concurrent Task.\",\n+                                        \"displayName\": \"Rollback\",\n+                                        \"value\": \"Rollback\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Route to Failure\",\n+                                \"description\": \"Specifies how the processor handles a FlowFile if it is unable to publish the data to Kafka\",\n+                                \"displayName\": \"Failure Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n+                                \"name\": \"Failure Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Data Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n-                                \"displayName\": \"Data Timeout\",\n+                            \"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\": \"Data Timeout\",\n+                                \"name\": \"ack.wait.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-                                \"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-M4\"\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+                            \"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\": \"File Filter Regex\",\n-                                \"required\": false,\n+                                \"name\": \"acks\",\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+                            \"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\": \"Host Key File\",\n+                                \"name\": \"attribute-name-regex\",\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+                            \"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\": \"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+                                \"name\": \"aws.profile.name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Http Proxy Username\": {\n-                                \"description\": \"Http Proxy Username\",\n-                                \"displayName\": \"Http Proxy Username\",\n+                            \"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\": \"Http Proxy Username\",\n-                                \"required\": false,\n+                                \"name\": \"bootstrap.servers\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Dotted Files\": {\n+                            \"compression.type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"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\": \"If true, files whose names begin with a dot (\\\".\\\") will be ignored\",\n-                                \"displayName\": \"Ignore Dotted Files\",\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 Dotted Files\",\n+                                \"name\": \"compression.type\",\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+                            \"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\": \"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\": \"kafka-key\",\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+                            \"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\": \"Maximum File Age\",\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-M4\"\n+                                }\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+                            \"key-attribute-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The key is interpreted as a UTF-8 Encoded string.\",\n+                                        \"displayName\": \"UTF-8 Encoded\",\n+                                        \"value\": \"utf-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The key is interpreted as arbitrary binary data that is encoded using hexadecimal characters with uppercase letters.\",\n+                                        \"displayName\": \"Hex Encoded\",\n+                                        \"value\": \"hex\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"utf-8\",\n+                                \"description\": \"FlowFiles that are emitted have an attribute named 'kafka.key'. This property dictates how the value of the attribute should be encoded.\",\n+                                \"displayName\": \"Key Attribute Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\n-                                \"required\": false,\n+                                \"name\": \"key-attribute-encoding\",\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+                            \"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\": \"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+                                \"name\": \"max.block.ms\",\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+                            \"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\": \"Minimum File Size\",\n+                                \"name\": \"max.request.size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n+                                \"name\": \"message-demarcator\",\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+                            \"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\": \"Path Filter Regex\",\n+                                \"name\": \"message-header-encoding\",\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+                            \"partition\": {\n+                                \"description\": \"Specifies which Partition Records will go to.\",\n+                                \"displayName\": \"Partition\",\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\": \"partition\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"partitioner.class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n+                                        \"displayName\": \"RoundRobinPartitioner\",\n+                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\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\": \"\",\n-                                        \"displayName\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\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\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy Type\",\n+                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n+                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n+                                \"displayName\": \"Partitioner class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Proxy Type\",\n+                                \"name\": \"partitioner.class\",\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+                            \"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\": \"Remote Path\",\n+                                \"name\": \"sasl.kerberos.service.name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remote Poll Batch Size\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"The value specifies how many file paths to find in a given directory on the remote system when doing a file listing. This value in general should not need to be modified but when polling against a remote system with a tremendous number of files this value can be critical.  Setting this value too high can result very poor performance and setting it too low can cause the flow to be slower than normal.\",\n-                                \"displayName\": \"Remote Poll Batch Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remote Poll Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Search Recursively\": {\n+                            \"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-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n-                                \"displayName\": \"Search Recursively\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Search Recursively\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Send Keep Alive On Timeout\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"Plain username and password authentication\",\n+                                        \"displayName\": \"PLAIN\",\n+                                        \"value\": \"PLAIN\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"Send Keep Alive On Timeout\",\n+                                \"name\": \"sasl.mechanism\",\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+                            \"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\": \"false\",\n-                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n-                                \"displayName\": \"Strict Host Key Checking\",\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\": \"Strict Host Key Checking\",\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-                            \"Use Compression\": {\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\": \"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\": \"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+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"SCRAM-SHA-512\",\n+                                            \"SCRAM-SHA-256\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SASL Mechanism\",\n+                                        \"propertyName\": \"sasl.mechanism\"\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+                                \"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\": \"et-initial-listing-target\",\n+                                \"name\": \"sasl.token.auth\",\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-M4\"\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+                            \"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\": \"et-time-window\",\n+                                \"name\": \"sasl.username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"follow-symlink\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n-                                \"displayName\": \"Follow symlink\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"follow-symlink\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n-                                        \"displayName\": \"Tracking Timestamps\",\n-                                        \"value\": \"timestamps\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n+                                        \"displayName\": \"SSL\",\n+                                        \"value\": \"SSL\"\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\": \"SASL_PLAINTEXT\",\n+                                        \"value\": \"SASL_PLAINTEXT\"\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\": \"SASL_SSL\",\n+                                        \"value\": \"SASL_SSL\"\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\": \"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\": \"listing-strategy\",\n+                                \"name\": \"security.protocol\",\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+                            \"ssl.context.service\": {\n+                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"ssl.context.service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"topic\": {\n+                                \"description\": \"The name of the Kafka Topic to publish to.\",\n+                                \"displayName\": \"Topic Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\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                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"target-system-timestamp-precision\": {\n+                            \"use-transactions\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n-                                        \"displayName\": \"Auto Detect\",\n-                                        \"value\": \"auto-detect\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n-                                        \"displayName\": \"Milliseconds\",\n-                                        \"value\": \"millis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n-                                        \"displayName\": \"Seconds\",\n-                                        \"value\": \"seconds\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"For a target system that only supports precision in minutes.\",\n-                                        \"displayName\": \"Minutes\",\n-                                        \"value\": \"minutes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"auto-detect\",\n-                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n-                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"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\": \"target-system-timestamp-precision\",\n+                                \"name\": \"use-transactions\",\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+                        \"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\": \"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+                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\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-                            \"files\",\n-                            \"ingest\",\n-                            \"input\",\n-                            \"list\",\n-                            \"remote\",\n-                            \"sftp\",\n-                            \"source\"\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.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.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-M4\",\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\": \"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+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-aws-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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-                                \"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-                            \"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+                            \"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+                                \"name\": \"aws-credentials-provider-service\",\n                                 \"required\": false,\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-M4\"\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-                                \"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-                            \"FTPS\",\n-                            \"ingest\",\n-                            \"listen\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path pointing to the file's target directory. E.g.: file.txt is uploaded to /Folder1/SubFolder, then the value of the path attribute will be \\\"/Folder1/SubFolder/\\\" (note that it ends with a separator character).\",\n-                                \"name\": \"path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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+                            \"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\": \"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+                                \"name\": \"cache-expiration\",\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-                                \"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+                            \"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\": \"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+                                \"name\": \"cache-size\",\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+                            \"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\": \"Max Unconfirmed Flowfile Time\",\n+                                \"name\": \"communications-timeout\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n+                                \"displayName\": \"Proxy Configuration Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"proxy-configuration-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"region\": {\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\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-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\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Does not request the client certificate on handshake\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"AUTO\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"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+                                \"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\": \"multipart-read-buffer-size\",\n+                                \"name\": \"region\",\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+                            \"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\": \"multipart-request-max-size\",\n+                                \"name\": \"schema-registry-name\",\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+                            \"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\": \"record-reader\",\n+                                \"name\": \"ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\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+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Relationship for successfully received FlowFiles\",\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-M4\"\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-                            \"http\",\n-                            \"https\",\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"rest\"\n+                            \"avro\",\n+                            \"aws\",\n+                            \"glue\",\n+                            \"registry\",\n+                            \"schema\"\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"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-                        \"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-                                \"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\": \"WANT\",\n-                                        \"value\": \"WANT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client Auth\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Local Network Interface\": {\n-                                \"description\": \"The name of a local network interface to be used to restrict listening to a specific LAN.\",\n-                                \"displayName\": \"Local Network Interface\",\n+                            \"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\": \"Local Network Interface\",\n+                                \"name\": \"Access Key\",\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+                                \"sensitive\": true\n                             },\n-                            \"Max Size of Message Queue\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum size of the internal queue used to buffer messages being transferred from the underlying channel to the processor. Setting this value higher allows more messages to be buffered in memory during surges of incoming messages, but increases the total memory used by the processor during these surges.\",\n-                                \"displayName\": \"Max Size of Message Queue\",\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\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"Assume Role ARN\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Buffer\",\n+                            \"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\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Assume Role Session Name\",\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+                            \"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\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"Credentials File\",\n+                                \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"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+                                \"name\": \"Secret Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"Session 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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"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-                            \"listen\",\n-                            \"logs\",\n-                            \"relp\",\n-                            \"tcp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ListenRELP\",\n-                        \"typeDescription\": \"Listens for RELP messages being sent to a given port over TCP. Each message will be acknowledged after successfully writing the message to a FlowFile. Each FlowFile will contain data portion of one or more RELP frames. In the case where the RELP frames contain syslog messages, the output of this processor can be sent to a ParseSyslog processor for further processing.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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 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-                            \"Client Auth\": {\n+                            \"anonymous-credentials\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"REQUIRED\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"SSL Context Service\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"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\": \"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\": \"anonymous-credentials\",\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+                            \"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\": \"Max Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-external-id\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Number of TCP Connections\": {\n-                                \"defaultValue\": \"2\",\n+                            \"assume-role-proxy-host\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of concurrent connections to accept Syslog messages in TCP mode.\",\n-                                \"displayName\": \"Max Number of TCP Connections\",\n+                                \"description\": \"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\": \"Max Number of TCP Connections\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-proxy-host\",\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+                            \"assume-role-proxy-port\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-proxy-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n+                            \"assume-role-ssl-context-service\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"TCP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\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\": \"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\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-M4\"\n+                                }\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+                            \"assume-role-sts-endpoint\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Assume Role ARN\",\n+                                        \"propertyName\": \"Assume Role ARN\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-endpoint\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Parse Messages\": {\n+                            \"assume-role-sts-region\": {\n                                 \"allowableValues\": [\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-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 : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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 : 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\": \"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+                                \"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\": \"Parse Messages\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-region\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"assume-role-sts-signer-override\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWS4SignerType\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\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\": \"Protocol\",\n-                                \"required\": true,\n+                                \"name\": \"assume-role-sts-signer-override\",\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+                            \"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\": \"Receive Buffer Size\",\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-                            \"SSL Context Service\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n+                                        \"propertyName\": \"assume-role-sts-signer-override\"\n                                     }\n                                 ],\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                                \"description\": \"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\": \"SSL Context Service\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"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-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"socket-keep-alive\": {\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-                                \"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\": \"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\": \"socket-keep-alive\",\n-                                \"required\": true,\n+                                \"name\": \"default-credentials\",\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+                                \"dynamic\": false,\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\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+                                \"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-M4\"\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+                                \"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-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"listen\",\n-                            \"logs\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"aws\",\n+                            \"credentials\",\n+                            \"provider\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n-                            },\n-                            {\n-                                \"description\": \"An indicator of whether this message matched the expected formats. If this value is false, the other attributes will be empty and only the original message will be available in the content.\",\n-                                \"name\": \"syslog.valid\"\n-                            },\n-                            {\n-                                \"description\": \"The protocol over which the Syslog message was received.\",\n-                                \"name\": \"syslog.protocol\"\n-                            },\n-                            {\n-                                \"description\": \"The port over which the Syslog message was received.\",\n-                                \"name\": \"syslog.port\"\n-                            },\n-                            {\n-                                \"description\": \"The mime.type of the FlowFile which will be text/plain for Syslog messages.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Client Auth\": {\n+                            \"encryption-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"No encryption.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Use server-side, S3-managed encryption.\",\n+                                        \"displayName\": \"Server-side S3\",\n+                                        \"value\": \"SSE_S3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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-                                \"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\": \"NONE\",\n+                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n+                                \"displayName\": \"Encryption Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Message Delimiter\",\n+                                \"name\": \"encryption-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"Port\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Receive Buffer Size\": {\n-                                \"defaultValue\": \"65507 B\",\n-                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Receive Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, messages will be received over a secure connection.\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                                \"name\": \"key-id-or-key-material\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"pool-receive-buffers\": {\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\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n-                                \"displayName\": \"Pool Receive Buffers\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"pool-receive-buffers\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"listen\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\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-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"tcp.sender\"\n-                            },\n-                            {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"tcp.port\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.issuer.dn\"\n-                            },\n-                            {\n-                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n-                                \"name\": \"client.certificate.subject.dn\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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-                            \"client-auth\": {\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\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\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\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"REQUIRED\",\n-                                \"description\": \"The client authentication policy to use for the SSL Context. Only used if an SSL Context Service is provided.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"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\": \"client-auth\",\n+                                \"name\": \"kms-region\",\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-                            \"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+                            }\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"max-size-socket-buffer\",\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-M4\"\n+                                }\n                             },\n-                            \"port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reader-error-handling-strategy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Transfers any records already received and closes the connection.\",\n-                                        \"displayName\": \"Transfer\",\n-                                        \"value\": \"Transfer\"\n+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US)\",\n+                                        \"value\": \"us-gov-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Discards any records already received and closes the connection.\",\n-                                        \"displayName\": \"Discard\",\n-                                        \"value\": \"Discard\"\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\": \"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\": \"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\": \"reader-error-handling-strategy\",\n+                                \"name\": \"Region\",\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+                            }\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"aws-communications-timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-batch-size\",\n+                                \"name\": \"aws-communications-timeout\",\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+                            \"aws-credentials-provider-service\": {\n+                                \"description\": \"Service used to obtain an Amazon Web Services Credentials Provider\",\n+                                \"displayName\": \"AWS Credentials Provider Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"aws-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\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n+                                \"name\": \"aws-region\",\n                                 \"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-M4\"\n-                                }\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+                            \"aws-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+                                \"name\": \"aws-ssl-context-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"secret-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on Secret Name that identifies Secrets whose parameters should be fetched. Any secrets whose names do not match this pattern will not be fetched.\",\n+                                \"displayName\": \"Secret Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"secret-name-pattern\",\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-                                \"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-                            \"listen\",\n-                            \"record\",\n-                            \"ssl\",\n-                            \"tcp\",\n-                            \"tls\"\n+                            \"aws\",\n+                            \"manager\",\n+                            \"secrets\",\n+                            \"secretsmanager\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"type\": \"org.apache.nifi.parameter.aws.AwsSecretsManagerParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from AWS SecretsManager.  Each secret becomes a Parameter group, which can map to a Parameter Context, with key/value pairs in the secret mapping to Parameters in the group.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -30916,168 +31492,448 @@\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_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+                            \"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\": \"Character Set\",\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-M4\"\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-                            \"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+                            \"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\": \"Local Network Interface\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"MetricName\": {\n+                                \"description\": \"The name of the metric\",\n+                                \"displayName\": \"Metric Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Batch Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"MetricName\",\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+                            \"Namespace\": {\n+                                \"description\": \"The namespace for the metric data for CloudWatch\",\n+                                \"displayName\": \"Namespace\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Namespace\",\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+                            \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"Max Size of Socket Buffer\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"Message Delimiter\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\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-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Unit\",\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 messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n-                                \"displayName\": \"Receive Buffer Size\",\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\": \"Receive Buffer Size\",\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-M4\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sending Host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sampleCount\",\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+                            \"sum\": {\n+                                \"description\": \"The sum of values for the sample set. Must be a double\",\n+                                \"displayName\": \"Sum\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Sending Host Port\",\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\": \"Messages received successfully will be sent out this relationship.\",\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+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ingest\",\n-                            \"listen\",\n-                            \"source\",\n-                            \"udp\"\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.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.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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31086,212 +31942,518 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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+                            \"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\": \"Character Set\",\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-M4\"\n+                                }\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+                            \"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\": \"Local Network Interface\",\n+                                \"name\": \"Batch items for each request (between 1 and 50)\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Message Queue\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Buffer\",\n-                                \"required\": true,\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-                            \"Port\": {\n-                                \"description\": \"The port to listen on for communication.\",\n-                                \"displayName\": \"Port\",\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\": \"Port\",\n+                                \"name\": \"Hash Key Name\",\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 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\": \"Receive Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hash Key Value\",\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+                            \"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\": \"batch-size\",\n+                                \"name\": \"Hash Key Value Type\",\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+                            \"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\": \"poll-timeout\",\n+                                \"name\": \"Range Key Value Type\",\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+                            \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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-reader\",\n+                                \"name\": \"Region\",\n                                 \"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-M4\"\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+                            \"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\": \"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-M4\"\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+                            \"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\": \"sending-host\",\n-                                \"required\": false,\n+                                \"name\": \"Table Name\",\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+                            \"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\": \"sending-host-port\",\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-M4\"\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\": \"Messages received successfully will be sent out 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\": \"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 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-                            \"ingest\",\n-                            \"listen\",\n-                            \"record\",\n-                            \"source\",\n-                            \"udp\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The sending host of the messages.\",\n-                                \"name\": \"udp.sender\"\n+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The sending port the messages were received.\",\n-                                \"name\": \"udp.port\"\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n                             },\n                             {\n-                                \"description\": \"The number of records written to the flow file.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\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\": \"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-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31304,214 +32466,528 @@\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 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+                            \"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\": \"Attributes to Ignore\",\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-M4\"\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-                            \"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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Attributes to Log\",\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-                            \"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\": \"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+                            \"Hash Key Name\": {\n+                                \"description\": \"The hash key name of the item\",\n+                                \"displayName\": \"Hash Key Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Log FlowFile Properties\",\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-                            \"Log Level\": {\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\": \"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+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"error\",\n-                                        \"value\": \"error\"\n+                                        \"displayName\": \"number\",\n+                                        \"value\": \"number\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"info\",\n-                                \"description\": \"The Log Level to use when logging the Attributes\",\n-                                \"displayName\": \"Log Level\",\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\": \"Log Level\",\n+                                \"name\": \"Hash Key Value Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Payload\": {\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\": \"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\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n-                                \"displayName\": \"Log Payload\",\n+                                \"defaultValue\": \"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\": \"Log Payload\",\n+                                \"name\": \"Range Key Value Type\",\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+                            \"Region\": {\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\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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\": \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"Line per Attribute\",\n-                                \"description\": \"Specifies the format to use for logging FlowFile attributes\",\n-                                \"displayName\": \"Output Format\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Format\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"attributes-to-ignore-regex\",\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-M4\"\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-                            \"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+                            \"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\": \"attributes-to-log-regex\",\n+                                \"name\": \"proxy-configuration-service\",\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+                                \"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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": 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.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\": \"All FlowFiles are routed 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\": \"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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\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.standard.LogAttribute\",\n-                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31524,433 +33000,545 @@\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"log-level\",\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-M4\"\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-                            \"log-message\": {\n-                                \"description\": \"The log message to emit\",\n-                                \"displayName\": \"Log message\",\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\": \"log-message\",\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-                            \"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+                            \"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\": \"log-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Hash Key Value\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"attributes\",\n-                            \"logging\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n-                        \"typeDescription\": \"Emits a log message at the specified log level\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-                            \"include-empty-values\": {\n+                            },\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\": \"true\",\n-                                \"description\": \"Include null or blank values for keys that are null or blank\",\n-                                \"displayName\": \"Include Empty Values\",\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\": \"include-empty-values\",\n+                                \"name\": \"Hash Key Value Type\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-service\",\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-                                \"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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n-                                \"name\": \"unmatched\"\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-                            {\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\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n-                            \"cache\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"lookup\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n-                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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\": \"Root Record Path\",\n+                                \"name\": \"Range Key Value\",\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+                            \"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\": \"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-M4\"\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+                                \"name\": \"Range Key Value Type\",\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-M4\"\n-                                }\n-                            },\n-                            \"record-update-strategy\": {\n+                            \"Region\": {\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+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-update-strategy\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"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-M4\"\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+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"result-contents\",\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-                            \"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\": \"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+                            \"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\": \"routing-strategy\",\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-M4\"\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.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+                            \"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\": 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\": \"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\": \"If a FlowFile cannot be enriched, the unchanged FlowFile will be routed 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\": true,\n-                        \"supportsDynamicProperties\": 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-                            \"database\",\n-                            \"db\",\n-                            \"enrichment\",\n-                            \"filter\",\n-                            \"json\",\n-                            \"logs\",\n-                            \"lookup\",\n-                            \"record\",\n-                            \"route\"\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.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.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-M4\",\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\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\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-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -31963,674 +33551,551 @@\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+                            \"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\": \"Attribute Strategy\",\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-M4\"\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-                            \"Compression Level\": {\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\": \"0\",\n-                                        \"value\": \"0\"\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\": \"1\",\n-                                        \"value\": \"1\"\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\": \"2\",\n-                                        \"value\": \"2\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"3\",\n-                                        \"value\": \"3\"\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\": \"4\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"5\",\n-                                        \"value\": \"5\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"6\",\n-                                        \"value\": \"6\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"7\",\n-                                        \"value\": \"7\"\n+                                        \"description\": \"AWS Region Code : ap-south-1\",\n+                                        \"displayName\": \"Asia Pacific (Mumbai)\",\n+                                        \"value\": \"ap-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"8\",\n-                                        \"value\": \"8\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Osaka)\",\n+                                        \"value\": \"ap-northeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"9\",\n-                                        \"value\": \"9\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"1\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the compression level to use when using the Zip Merge Format; if not using the Zip Merge Format, this value is ignored\",\n-                                \"displayName\": \"Compression Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Compression Level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Correlation Attribute Name\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"If specified, like FlowFiles will be binned together, where 'like FlowFiles' means FlowFiles that have the same value for this Attribute. If not specified, FlowFiles are bundled by the order in which they are pulled from the queue.\",\n-                                \"displayName\": \"Correlation Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Correlation Attribute Name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Delimiter Strategy\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\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\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\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\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\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+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Determines if Header, Footer, and Demarcator should point to files containing the respective content, or if the values of the properties should be used as the content.\",\n-                                \"displayName\": \"Delimiter Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Delimiter Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Demarcator File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : cn-northwest-1\",\n+                                        \"displayName\": \"China (Ningxia)\",\n+                                        \"value\": \"cn-northwest-1\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\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-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Footer File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\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-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n-                                \"sensitive\": false\n-                            },\n-                            \"Header File\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Binary Concatenation\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"Filename\",\n-                                            \"Text\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n-                                        \"propertyName\": \"Delimiter Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Filename or text specifying the header to use. If not specified, no header is supplied.\",\n-                                \"displayName\": \"Header\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                            \"Keep Path\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"ZIP\",\n-                                            \"TAR\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\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\": \"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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Keep Path\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Bin Age\": {\n-                                \"description\": \"The maximum age of a Bin that will trigger a Bin to be complete. Expected format is <duration> <time unit> where <duration> is a positive integer and time unit is one of seconds, minutes, hours\",\n-                                \"displayName\": \"Max Bin Age\",\n+                            \"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\": \"Max Bin Age\",\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-M4\"\n+                                }\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+                            \"Table Name\": {\n+                                \"description\": \"The DynamoDB table name\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Group Size\",\n-                                \"required\": 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-                            \"Maximum Number of Entries\": {\n-                                \"defaultValue\": \"1000\",\n+                            \"partition-key-attribute\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"ByAttribute\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Partition Key Strategy\",\n+                                        \"propertyName\": \"partition-key-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The maximum number of files to include in a bundle\",\n-                                \"displayName\": \"Maximum Number of Entries\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Number of Entries\",\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-                            \"Maximum number of Bins\": {\n-                                \"defaultValue\": \"5\",\n-                                \"description\": \"Specifies the maximum number of bins that can be held in memory at any one time\",\n-                                \"displayName\": \"Maximum number of Bins\",\n+                            \"partition-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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum number of Bins\",\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-                            \"Merge Format\": {\n+                            \"partition-key-strategy\": {\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+                                        \"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\": \"The contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Binary Concatenation\",\n-                                        \"value\": \"Binary Concatenation\"\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\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n-                                        \"displayName\": \"Avro\",\n-                                        \"value\": \"Avro\"\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\": \"Binary Concatenation\",\n-                                \"description\": \"Determines the format that will be used to merge the content.\",\n-                                \"displayName\": \"Merge Format\",\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\": \"Merge Format\",\n+                                \"name\": \"partition-key-strategy\",\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+                            \"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\": \"Merge Strategy\",\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-M4\"\n+                                }\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+                            \"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\": \"Minimum Group Size\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Minimum Number of Entries\": {\n-                                \"defaultValue\": \"1\",\n+                            \"sort-key-field\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Bin-Packing Algorithm\"\n+                                            \"ByField\",\n+                                            \"BySequence\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Merge Strategy\",\n-                                        \"propertyName\": \"Merge Strategy\"\n+                                        \"propertyDisplayName\": \"Sort Key Strategy\",\n+                                        \"propertyName\": \"sort-key-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"The minimum number of files to include in a bundle\",\n-                                \"displayName\": \"Minimum Number of Entries\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum Number of Entries\",\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-                            \"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+                            \"sort-key-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+                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n                                     },\n                                     {\n-                                        \"description\": \"For any input format that supports metadata (Avro, e.g.), any FlowFile whose metadata values do not match those of the first FlowFile in the bin will not be merged.\",\n-                                        \"displayName\": \"Do Not Merge Uncommon Metadata\",\n-                                        \"value\": \"Do Not Merge Uncommon Metadata\"\n+                                        \"description\": \"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\": \"Ignores (does not transfer, compare, etc.) any metadata from a FlowFile whose content supports embedded metadata.\",\n-                                        \"displayName\": \"Ignore Metadata\",\n-                                        \"value\": \"Ignore Metadata\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do Not Merge Uncommon Metadata\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Avro\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Merge Format\",\n-                                        \"propertyName\": \"Merge Format\"\n+                                        \"description\": \"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-                                \"description\": \"For FlowFiles whose input format supports metadata (Avro, e.g.), this property determines which metadata should be added to the bundle. If 'Use First Metadata' is selected, the metadata keys/values from the first FlowFile to be bundled will be used. If 'Keep Only Common Metadata' is selected, only the metadata that exists on all FlowFiles in the bundle, with the same value, will be preserved. If 'Ignore Metadata' is selected, no metadata is transferred to the outgoing bundled FlowFile. If 'Do Not Merge Uncommon Metadata' is selected, any FlowFile whose metadata values do not match those of the first bundled FlowFile will not be merged.\",\n-                                \"displayName\": \"Metadata Strategy\",\n+                                \"defaultValue\": \"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\": \"mergecontent-metadata-strategy\",\n+                                \"name\": \"sort-key-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n-                                \"name\": \"segment.original.filename\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n-                                \"name\": \"tar.permissions\"\n+                                \"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.standard.MergeRecord\",\n-                            \"org.apache.nifi.processors.standard.SegmentContent\"\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\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n-                                \"name\": \"failure\"\n+                                \"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\": \"The FlowFiles that were used to create the bundle\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The FlowFile containing the merged content\",\n-                                \"name\": \"merged\"\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\": \"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+                                \"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-                            \"archive\",\n-                            \"concatenation\",\n-                            \"content\",\n-                            \"correlation\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"merge\",\n-                            \"stream\",\n-                            \"tar\",\n-                            \"zip\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"DynamoDB\",\n+                            \"Insert\",\n+                            \"Put\",\n+                            \"Record\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n-                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n-                        \"useCases\": [\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-M4\",\n+                        \"writesAttributes\": [\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+                                \"description\": \"Number of chunks successfully inserted into DynamoDB. If not set, it is considered as 0\",\n+                                \"name\": \"dynamodb.chunks.processed\"\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+                                \"description\": \"DynamoDB unprocessed keys\",\n+                                \"name\": \"dynamodb.key.error.unprocessed\"\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-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"DynamoDB range key error\",\n+                                \"name\": \"dynmodb.range.key.value.error\"\n+                            },\n                             {\n-                                \"description\": \"When more than 1 file is merged, the filename comes from the segment.original.filename attribute. If that attribute does not exist in the source FlowFiles, then the filename is set to the number of nanoseconds matching system time. Then a filename extension may be applied:if Merge Format is TAR, then the filename will be appended with .tar, if Merge Format is ZIP, then the filename will be appended with .zip, if Merge Format is FlowFileStream, then the filename will be appended with .pkg\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"DynamoDB key not found\",\n+                                \"name\": \"dynamodb.key.error.not.found\"\n                             },\n                             {\n-                                \"description\": \"The number of FlowFiles that were merged into this bundle\",\n-                                \"name\": \"merge.count\"\n+                                \"description\": \"DynamoDB exception message\",\n+                                \"name\": \"dynamodb.error.exception.message\"\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\": \"DynamoDB error code\",\n+                                \"name\": \"dynamodb.error.code\"\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\": \"DynamoDB error message\",\n+                                \"name\": \"dynamodb.error.message\"\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\": \"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-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32640,282 +34105,378 @@\n                             \"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\": \"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-                            }\n-                        ],\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+                            \"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\": \"Attribute Strategy\",\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-M4\"\n+                                }\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"correlation-attribute-name\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"max-bin-age\",\n+                                \"name\": \"Batch Size\",\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-bin-size\",\n-                                \"required\": false,\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\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+                            \"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\": \"max-records\",\n+                                \"name\": \"Endpoint Override URL\",\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 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.bin.count\",\n-                                \"required\": true,\n+                                \"name\": \"Max message buffer size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"merge-strategy\": {\n+                            \"Region\": {\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\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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-                                    }\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"merge-strategy\",\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-                                \"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-                                \"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-M4\"\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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute indicates how many FlowFiles should be expected in the given bundle.\",\n-                                \"name\": \"fragment.count\"\n+                                        \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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-M4\"\n+                                }\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+                        },\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the bundle cannot be created, all FlowFiles that would have been used to created the bundle will be transferred to failure\",\n+                                \"description\": \"FlowFiles are routed to failure 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 records\",\n-                                \"name\": \"merged\"\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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"content\",\n-                            \"correlation\",\n-                            \"event\",\n-                            \"merge\",\n-                            \"record\",\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"firehose\",\n+                            \"kinesis\",\n+                            \"put\",\n                             \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.MergeRecord\",\n-                        \"typeDescription\": \"This Processor merges together multiple record-oriented FlowFiles into a single FlowFile that contains all of the Records of the input FlowFiles. This Processor works by creating 'bins' and then adding FlowFiles to these bins until they are full. Once a bin is full, all of the FlowFiles will be combined into a single output FlowFile, and that FlowFile will be routed to the 'merged' Relationship. A bin will consist of potentially many 'like FlowFiles'. In order for two FlowFiles to be considered 'like FlowFiles', they must have the same Schema (as identified by the Record Reader) and, if the <Correlation Attribute Name> property is set, the same value for the specified attribute. See Processor Usage and Additional Details for more information. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n-                        \"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+                        \"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-M4\",\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+                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.message\"\n                             },\n                             {\n-                                \"description\": \"UUID of the merged FlowFile that will be added to the original FlowFiles attributes\",\n-                                \"name\": \"merge.uuid\"\n+                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.error.code\"\n                             },\n                             {\n-                                \"description\": \"Any Attribute that the configured Record Writer returns will be added to the FlowFile.\",\n-                                \"name\": \"<Attributes from Record Writer>\"\n+                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n+                                \"name\": \"aws.kinesis.firehose.record.id\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -32923,356 +34484,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+                        \"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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"End Offset\",\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-M4\"\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-                            \"Remove All Content\": {\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\": \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"Remove all content from the FlowFile superseding Start Offset and End Offset properties.\",\n-                                \"displayName\": \"Remove All Content\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove All Content\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"Start Offset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-application-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\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-                            \"binary\",\n-                            \"discard\",\n-                            \"keep\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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+                            },\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Activity Restored Message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-checkpoint-interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Continually Send Messages\": {\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\": \"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+                                \"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\": \"Continually Send Messages\",\n+                                \"name\": \"amazon-kinesis-stream-cloudwatch-flag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Copy Attributes\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n-                                \"displayName\": \"Copy Attributes\",\n+                            \"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\": \"Copy Attributes\",\n+                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Inactivity Message\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Monitoring Scope\": {\n+                            \"amazon-kinesis-stream-initial-position\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"node\",\n-                                        \"value\": \"node\"\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\": \"\",\n-                                        \"displayName\": \"cluster\",\n-                                        \"value\": \"cluster\"\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\": \"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+                                \"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\": \"Monitoring Scope\",\n+                                \"name\": \"amazon-kinesis-stream-initial-position\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"amazon-kinesis-stream-position-timestamp\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"cluster\"\n+                                            \"AT_TIMESTAMP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Monitoring Scope\",\n-                                        \"propertyName\": \"Monitoring Scope\"\n+                                        \"propertyDisplayName\": \"Initial Stream Position\",\n+                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\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+                                \"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\": \"Reporting Node\",\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-M4\"\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-M4\"\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-                            \"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+                            \"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\": \"Reset State on Restart\",\n+                                \"name\": \"amazon-kinesis-stream-retry-wait\",\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+                            \"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\": \"Threshold Duration\",\n+                                \"name\": \"amazon-kinesis-stream-timestamp-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Wait for Activity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n-                                \"displayName\": \"Wait for Activity\",\n+                            \"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\": \"Wait for Activity\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"stateful\": {\n-                            \"description\": \"MonitorActivity stores the last timestamp at each node as state, so that it can examine activity at cluster wide. If 'Copy Attribute' is set to true, then flow file attributes are also persisted. In local scope, it stores last known activity timestamp if the flow is inactive.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\",\n-                                \"LOCAL\"\n-                            ]\n-                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"This relationship is used to transfer an Inactivity indicator when no FlowFiles are routed to 'success' for Threshold Duration amount of time\",\n-                                \"name\": \"inactive\"\n-                            },\n-                            {\n-                                \"description\": \"All incoming FlowFiles are routed to success\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n-                                \"name\": \"activity.restored\"\n                             }\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\": \"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-                            \"active\",\n-                            \"activity\",\n-                            \"detection\",\n-                            \"flow\",\n-                            \"inactive\",\n-                            \"monitor\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"consume\",\n+                            \"kinesis\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": true,\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n-                                \"name\": \"inactivityStartMillis\"\n+                                \"description\": \"Partition key of the (last) Kinesis Record read from the Shard\",\n+                                \"name\": \"aws.kinesis.partition.key\"\n                             },\n                             {\n-                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n-                                \"name\": \"inactivityDurationMillis\"\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-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33285,262 +35068,392 @@\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-cache-regex\": {\n-                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n-                                \"displayName\": \"Attribute Cache Regex\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-cache-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"distributed-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to cache release signals in order to release files queued at a corresponding Wait processor\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"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\": \"distributed-cache-service\",\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.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"release-signal-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"signal-buffer-count\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"signal-counter-delta\",\n-                                \"required\": true,\n+                                \"name\": \"amazon-kinesis-stream-partition-key\",\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+                            \"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\": \"signal-counter-name\",\n+                                \"name\": \"kinesis-stream-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.processors.standard.Wait\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n-                                \"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-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"notify\",\n-                            \"release\",\n-                            \"signal\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n-                                \"name\": \"notified\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"    \\\"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-                                        \"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-                                        \"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-                                \"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+                            \"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-                            {\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+                            \"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\": \"max-batch-size\",\n-                                \"required\": true,\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-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\",\n-                            \"org.apache.nifi.processors.standard.UnpackContent\"\n+                            \"org.apache.nifi.processors.aws.kinesis.stream.ConsumeKinesisStream\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n+                                \"description\": \"FlowFiles are routed to success 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-                            \"attributes\",\n-                            \"flowfile\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"package\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The mime.type will be changed to application/flowfile-v3\",\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                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33553,204 +35466,386 @@\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-                            \"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+                            \"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\": \"ACCEPT_EMPTY_EXTENSIONS\",\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-M4\"\n+                                }\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+                            \"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\": \"APPEND_RAW_MESSAGE_TO_JSON\",\n+                                \"name\": \"Amazon Lambda Name\",\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+                            \"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\": \"DATETIME_REPRESENTATION\",\n+                                \"name\": \"Amazon Lambda Qualifier (version)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FIELDS_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 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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\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\": \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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 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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"TIME_REPRESENTATION\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UTC\",\n-                                        \"value\": \"UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Local Timezone (system Default)\",\n-                                        \"value\": \"Local Timezone (system Default)\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local Timezone (system Default)\",\n-                                \"description\": \"Timezone to be used when representing date fields. UTC will convert all dates to UTC, while Local Timezone will convert them to the timezone used by NiFi.\",\n-                                \"displayName\": \"Timezone\",\n+                            \"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\": \"TIME_REPRESENTATION\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\"\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-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\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-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to 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-                            \"attributes\",\n-                            \"cef\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"system\"\n+                            \"amazon\",\n+                            \"aws\",\n+                            \"lambda\",\n+                            \"put\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The version of the CEF message.\",\n-                                \"name\": \"cef.header.version\"\n+                                \"description\": \"Function error message in result on posting message to AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.function.error\"\n                             },\n                             {\n-                                \"description\": \"The Device Vendor of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVendor\"\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\": \"The Device Product of the CEF message.\",\n-                                \"name\": \"cef.header.deviceProduct\"\n+                                \"description\": \"Payload in the result from AWS Lambda\",\n+                                \"name\": \"aws.lambda.result.payload\"\n                             },\n                             {\n-                                \"description\": \"The Device Version of the CEF message.\",\n-                                \"name\": \"cef.header.deviceVersion\"\n+                                \"description\": \"Log in the result of the message posted to Lambda\",\n+                                \"name\": \"aws.lambda.result.log\"\n                             },\n                             {\n-                                \"description\": \"The Device Event Class ID of the CEF message.\",\n-                                \"name\": \"cef.header.deviceEventClassId\"\n+                                \"description\": \"Exception message on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The name of the CEF message.\",\n-                                \"name\": \"cef.header.name\"\n+                                \"description\": \"Exception cause on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.cause\"\n                             },\n                             {\n-                                \"description\": \"The severity of the CEF message.\",\n-                                \"name\": \"cef.header.severity\"\n+                                \"description\": \"Exception error code on invoking from AWS Lambda\",\n+                                \"name\": \"aws.lambda.exception.error.code\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the message.\",\n-                                \"name\": \"cef.extension.*\"\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-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33759,106 +35854,383 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\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-M4\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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-M4\"\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-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"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                         \"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-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"system\"\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.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.aws.ml.polly.GetAwsPollyJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The priority of the Syslog message.\",\n-                                \"name\": \"syslog.priority\"\n-                            },\n-                            {\n-                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.severity\"\n-                            },\n-                            {\n-                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n-                                \"name\": \"syslog.facility\"\n-                            },\n-                            {\n-                                \"description\": \"The optional version from the Syslog message.\",\n-                                \"name\": \"syslog.version\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of the Syslog message.\",\n-                                \"name\": \"syslog.timestamp\"\n-                            },\n-                            {\n-                                \"description\": \"The hostname or IP address of the Syslog message.\",\n-                                \"name\": \"syslog.hostname\"\n+                                \"description\": \"The bucket name where polly output will be located.\",\n+                                \"name\": \"PollyS3OutputBucket\"\n                             },\n                             {\n-                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n-                                \"name\": \"syslog.sender\"\n+                                \"description\": \"Object key of polly output.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n-                                \"name\": \"syslog.body\"\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -33867,175 +36239,354 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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\": \"Specifies which character set of the Syslog messages\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\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-M4\"\n+                                }\n                             },\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"include_policy\",\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-                            \"nil_policy\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The missing field will not have an attribute added.\",\n-                                        \"displayName\": \"OMIT\",\n-                                        \"value\": \"OMIT\"\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\": \"The missing field will have an empty attribute added.\",\n-                                        \"displayName\": \"NULL\",\n-                                        \"value\": \"NULL\"\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\": \"The missing field will have an attribute added with the value of '-'.\",\n-                                        \"displayName\": \"DASH\",\n-                                        \"value\": \"DASH\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"NULL\",\n-                                \"description\": \"Defines how NIL values are handled for header fields.\",\n-                                \"displayName\": \"NIL Policy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"nil_policy\",\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-M4\"\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.standard.ListenSyslog\",\n-                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n-                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                            \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that could not be parsed as a Syslog message will be transferred to this Relationship without any attributes being added\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"attributes\",\n-                            \"event\",\n-                            \"logs\",\n-                            \"message\",\n-                            \"syslog\",\n-                            \"syslog5424\",\n-                            \"system\"\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.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.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-M4\",\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\": \"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-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34043,174 +36594,385 @@\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+                            \"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-reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"record-writer\",\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\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-M4\"\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.standard.ConvertRecord\",\n-                            \"org.apache.nifi.processors.standard.QueryRecord\",\n-                            \"org.apache.nifi.processors.standard.SplitRecord\",\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n+                            \"org.apache.nifi.processors.aws.ml.textract.StartAwsTextractJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\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\": \"Job successfully finished. FlowFile will be routed to this relation.\",\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\": \"The job failed, the original 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+                                \"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\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"bin\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n-                            \"record\",\n-                            \"recordpath\",\n-                            \"rpath\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"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.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-M4\",\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-                            },\n-                            {\n-                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n-                                \"name\": \"<dynamic property name>\"\n-                            }\n-                        ]\n+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34219,576 +36981,386 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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 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+                            \"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\": \"Data Record Path\",\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-M4\"\n+                                }\n                             },\n-                            \"Statement Type Record Path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use Record Path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies a RecordPath to evaluate against each Record in order to determine the Statement Type. The RecordPath should equate to either INSERT, UPDATE, UPSERT, or DELETE. (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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Statement Type Record Path\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively). If set to true, the driver/database automatically handles the commit/rollback.\",\n-                                \"displayName\": \"Database Session AutoCommit\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"database-session-autocommit\",\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-                            \"db-type\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\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\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\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\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Generic\",\n-                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n-                                \"displayName\": \"Database Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-allow-multiple-statements\": {\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-                                        \"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\": \"put-db-record-allow-multiple-statements\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-binary-format\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\n+                                    },\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+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n                                     },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n-                                        \"displayName\": \"Hexadecimal\",\n-                                        \"value\": \"Hexadecimal\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"String values for binary columns contain the original value in Base64 encoded format\",\n-                                        \"displayName\": \"Base64\",\n-                                        \"value\": \"Base64\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The format to be applied when decoding string values to binary.\",\n-                                \"displayName\": \"Binary String Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"put-db-record-field-containing-sql\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\n+                                    },\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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-quoted-identifiers\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\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\": \"put-db-record-quoted-identifiers\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-quoted-table-identifiers\": {\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\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-                                \"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-M4\"\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+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPDATE\",\n-                                        \"value\": \"UPDATE\"\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT\",\n-                                        \"value\": \"INSERT\"\n+                                        \"description\": \"AWS Region Code : eu-west-2\",\n+                                        \"displayName\": \"Europe (London)\",\n+                                        \"value\": \"eu-west-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UPSERT\",\n-                                        \"value\": \"UPSERT\"\n+                                        \"description\": \"AWS Region Code : eu-south-1\",\n+                                        \"displayName\": \"Europe (Milan)\",\n+                                        \"value\": \"eu-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"INSERT_IGNORE\",\n-                                        \"value\": \"INSERT_IGNORE\"\n+                                        \"description\": \"AWS Region Code : eu-west-3\",\n+                                        \"displayName\": \"Europe (Paris)\",\n+                                        \"value\": \"eu-west-3\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DELETE\",\n-                                        \"value\": \"DELETE\"\n+                                        \"description\": \"AWS Region Code : eu-south-2\",\n+                                        \"displayName\": \"Europe (Spain)\",\n+                                        \"value\": \"eu-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Use statement.type Attribute\",\n-                                        \"value\": \"Use statement.type Attribute\"\n+                                        \"description\": \"AWS Region Code : eu-north-1\",\n+                                        \"displayName\": \"Europe (Stockholm)\",\n+                                        \"value\": \"eu-north-1\"\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-                            \"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+                                        \"description\": \"AWS Region Code : eu-central-2\",\n+                                        \"displayName\": \"Europe (Zurich)\",\n+                                        \"value\": \"eu-central-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : il-central-1\",\n+                                        \"displayName\": \"Israel (Tel Aviv)\",\n+                                        \"value\": \"il-central-1\"\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\": \"put-db-record-translate-field-names\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"put-db-record-unmatched-column-behavior\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : me-south-1\",\n+                                        \"displayName\": \"Middle East (Bahrain)\",\n+                                        \"value\": \"me-south-1\"\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.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n+                                        \"description\": \"AWS Region Code : me-central-1\",\n+                                        \"displayName\": \"Middle East (UAE)\",\n+                                        \"value\": \"me-central-1\"\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\": \"AWS Region Code : sa-east-1\",\n+                                        \"displayName\": \"South America (Sao Paulo)\",\n+                                        \"value\": \"sa-east-1\"\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\": \"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 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\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-db-record-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-db-record-unmatched-field-behavior\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Any field in the document that cannot be mapped to a column in the database is ignored\",\n-                                        \"displayName\": \"Ignore Unmatched Fields\",\n-                                        \"value\": \"Ignore Unmatched Fields\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n-                                        \"displayName\": \"Fail on Unmatched Fields\",\n-                                        \"value\": \"Fail on Unmatched Fields\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Ignore Unmatched Fields\",\n-                                \"description\": \"If an incoming record has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n-                                \"displayName\": \"Unmatched Field Behavior\",\n+                            \"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\": \"put-db-record-unmatched-field-behavior\",\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-M4\"\n+                                }\n                             },\n-                            \"put-db-record-update-keys\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Use statement.type Attribute\",\n-                                            \"Use Record Path\",\n-                                            \"UPSERT\",\n-                                            \"UPDATE\",\n-                                            \"SQL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Statement Type\",\n-                                        \"propertyName\": \"put-db-record-statement-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n-                                \"displayName\": \"Update Keys\",\n+                            \"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\": \"put-db-record-update-keys\",\n+                                \"name\": \"json-payload\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"textract-type\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Expense Analysis\",\n+                                        \"value\": \"Expense Analysis\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"Specify how to handle error. By default (false), if an error occurs while processing a FlowFile, the FlowFile will be routed to 'failure' or 'retry' relationship based on error type, and processor can continue with next FlowFile. Instead, you may want to rollback currently processed FlowFiles and stop further processing immediately. In that case, you can do so by enabling this 'Rollback On Failure' property.  If enabled, failed FlowFiles will stay in the input relationship without penalizing it and being processed repeatedly until it gets processed successfully or removed by other means. It is important to set adequate 'Yield Duration' to avoid retrying too frequently.\",\n-                                \"displayName\": \"Rollback On Failure\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rollback-on-failure\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"table-schema-cache-size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"Specifies how many Table Schemas should be cached\",\n-                                \"displayName\": \"Table Schema Cache Size\",\n+                                \"defaultValue\": \"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\": \"table-schema-cache-size\",\n+                                \"name\": \"textract-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n-                                \"name\": \"statement.type\"\n-                            }\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the database cannot be updated and retrying the operation will also fail, such as an invalid query or an integrity constraint violation\",\n+                                \"description\": \"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-                            \"database\",\n-                            \"delete\",\n-                            \"insert\",\n-                            \"jdbc\",\n-                            \"put\",\n-                            \"record\",\n-                            \"sql\",\n-                            \"update\"\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.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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n-                                \"name\": \"putdatabaserecord.error\"\n+                                \"description\": \"The 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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34797,126 +37369,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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Entry Identifier\",\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-M4\"\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-                            \"Cache update strategy\": {\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\": \"Adds the specified entry to the cache, replacing any value that is currently set.\",\n-                                        \"displayName\": \"Replace if present\",\n-                                        \"value\": \"replace\"\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\": \"Adds the specified entry to the cache, if the key does not exist.\",\n-                                        \"displayName\": \"Keep original\",\n-                                        \"value\": \"keeporiginal\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"replace\",\n-                                \"description\": \"Determines how the cache is updated if the cache already contains the entry\",\n-                                \"displayName\": \"Cache update strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cache update strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Distributed Cache Service\": {\n-                                \"description\": \"The Controller Service that is used to cache flow files\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"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-M4\"\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+                            \"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\": \"Max cache entry 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-M4\"\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.FetchDistributedMapCache\"\n+                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\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\": \"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\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Any FlowFile that cannot be inserted into the cache will be routed to this relationship\",\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\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"put\"\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.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.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -34924,362 +37749,355 @@\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+                            \"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\": \"Attach File\",\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-M4\"\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-                            \"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+                            \"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\": \"BCC\",\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-                            \"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+                            \"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\": \"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+                                        \"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-                                            \"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+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"Use password\",\n-                                        \"displayName\": \"Use Password\",\n-                                        \"value\": \"password-based-authorization-mode\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Use OAuth2 to acquire access token\",\n-                                        \"displayName\": \"Use OAuth2\",\n-                                        \"value\": \"oauth-based-authorization-mode\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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-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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-character-set\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"oauth2-access-token-provider\",\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.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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 that are successfully sent will be routed to this relationship\",\n+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that fail to send will be routed 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\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\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+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"email\",\n-                            \"notify\",\n-                            \"put\",\n-                            \"smtp\"\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.standard.PutEmail\",\n-                        \"typeDescription\": \"Sends an e-mail to configured recipients for each incoming FlowFile\",\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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35287,432 +38105,307 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"pre.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            },\n-                            {\n-                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"post.cmd._____\",\n-                                \"value\": \"Not used\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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+                            \"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\": \"Batch Size\",\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-M4\"\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-                            \"Conflict Resolution\": {\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\": \"Remote file is replaced with new file, FlowFile goes to success\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\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\": \"File is not transferred, FlowFile goes to success\",\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\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\n                                     },\n                                     {\n-                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\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\": \"Conflict Resolution\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Mode\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Active\",\n-                                        \"value\": \"Active\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Passive\",\n-                                        \"value\": \"Passive\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Passive\",\n-                                \"description\": \"The FTP Connection Mode\",\n-                                \"displayName\": \"Connection Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\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-                                \"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\": \"Create Directory\",\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-                            \"Dot Rename\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : ap-northeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Seoul)\",\n+                                        \"value\": \"ap-northeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Singapore)\",\n+                                        \"value\": \"ap-southeast-1\"\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-                                \"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-                            \"Internal Buffer Size\": {\n-                                \"defaultValue\": \"16KB\",\n-                                \"description\": \"Set the internal buffer size for buffered data streams\",\n-                                \"displayName\": \"Internal Buffer Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Internal Buffer Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Last Modified Time\": {\n-                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n-                                \"displayName\": \"Last Modified Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Last Modified Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Password\": {\n-                                \"description\": \"Password for the user account\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                                \"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\": \"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+                                        \"description\": \"AWS Region Code : ap-southeast-2\",\n+                                        \"displayName\": \"Asia Pacific (Sydney)\",\n+                                        \"value\": \"ap-southeast-2\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\n+                                        \"description\": \"AWS Region Code : ap-northeast-1\",\n+                                        \"displayName\": \"Asia Pacific (Tokyo)\",\n+                                        \"value\": \"ap-northeast-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"description\": \"AWS Region Code : ca-central-1\",\n+                                        \"displayName\": \"Canada (Central)\",\n+                                        \"value\": \"ca-central-1\"\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+                                        \"description\": \"AWS Region Code : ca-west-1\",\n+                                        \"displayName\": \"Canada West (Calgary)\",\n+                                        \"value\": \"ca-west-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : cn-north-1\",\n+                                        \"displayName\": \"China (Beijing)\",\n+                                        \"value\": \"cn-north-1\"\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-                                \"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-                            \"Transfer Mode\": {\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\": \"Binary\",\n-                                        \"value\": \"Binary\"\n+                                        \"description\": \"AWS Region Code : eu-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ASCII\",\n-                                        \"value\": \"ASCII\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Binary\",\n-                                \"description\": \"The FTP Transfer Mode\",\n-                                \"displayName\": \"Transfer Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Mode\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n+                                        \"description\": \"AWS Region Code : eu-central-1\",\n+                                        \"displayName\": \"Europe (Frankfurt)\",\n+                                        \"value\": \"eu-central-1\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"AWS Region Code : eu-west-1\",\n+                                        \"displayName\": \"Europe (Ireland)\",\n+                                        \"value\": \"eu-west-1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"Indicates whether or not ZLIB compression should be used when transferring files\",\n-                                \"displayName\": \"Use Compression\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\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\": \"Region\",\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+                            \"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\": \"ftp-use-utf8\",\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-M4\"\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. 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.\",\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@@ -35721,59 +38414,71 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetFTP\"\n+                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\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\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\n+                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\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\": 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-                            \"files\",\n-                            \"ftp\",\n-                            \"put\",\n-                            \"remote\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\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.aws.ml.translate.GetAwsTranslateJobStatus\",\n+                        \"typeDescription\": \"Retrieves the current status of an AWS Translate job.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"S3 path-style output location of the result.\",\n+                                \"name\": \"outputLocation\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -35781,301 +38486,355 @@\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-                            \"Conflict Resolution Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                            \"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\": \"Conflict Resolution Strategy\",\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-M4\"\n+                                }\n                             },\n-                            \"Create Missing Directories\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\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\": \"Create Missing Directories\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Directory\": {\n-                                \"description\": \"The directory to which files should be written. You may use expression language such as /aa/bb/${path}\",\n-                                \"displayName\": \"Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\n+                                \"name\": \"Communications Timeout\",\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-                                \"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-                                \"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+                            \"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\": \"Permissions\",\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-                        },\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\": \"Files that have been successfully written to the output directory are 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-                                \"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-                            \"archive\",\n-                            \"copy\",\n-                            \"files\",\n-                            \"filesystem\",\n-                            \"local\",\n-                            \"put\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to the local file system\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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 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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-record-include-zero-record-results\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"put-record-reader\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"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-M4\"\n-                                }\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\": \"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+                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship if the records could not be transmitted and retrying the operation will also fail\",\n+                                \"description\": \"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-                            \"put\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"AWS\",\n+                            \"Amazon\",\n+                            \"ML\",\n+                            \"Machine Learning\",\n+                            \"Translate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutRecord\",\n-                        \"typeDescription\": \"The PutRecord processor uses a specified RecordReader to input (possibly multiple) records from an incoming flow file, and sends them to a destination specified by a Record Destination Service (i.e. record sink).\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36088,504 +38847,443 @@\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n-                                        \"displayName\": \"REPLACE\",\n-                                        \"value\": \"REPLACE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n-                                        \"displayName\": \"IGNORE\",\n-                                        \"value\": \"IGNORE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n-                                        \"displayName\": \"RENAME\",\n-                                        \"value\": \"RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n-                                        \"displayName\": \"REJECT\",\n-                                        \"value\": \"REJECT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n-                                        \"displayName\": \"FAIL\",\n-                                        \"value\": \"FAIL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\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\": \"Conflict Resolution\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"30 sec\",\n-                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n-                                \"displayName\": \"Connection Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Create Directory\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n-                                \"displayName\": \"Create Directory\",\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\": \"Create Directory\",\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-M4\"\n+                                }\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+                            \"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\": \"Data Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Disable Directory Listing\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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+                            \"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\": \"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+                                \"name\": \"Communications 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-                                \"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-                                \"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+                            \"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\": \"Message Authentication Codes Allowed\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"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\": \"Permissions\",\n+                                \"name\": \"FullControl User List\",\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+                            \"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\": \"Port\",\n+                                \"name\": \"Object Key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Private Key Passphrase\": {\n-                                \"description\": \"Password for the private key\",\n-                                \"displayName\": \"Private Key Passphrase\",\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\": \"Private Key Passphrase\",\n+                                \"name\": \"Owner\",\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+                            \"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\": \"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+                                \"name\": \"Read ACL User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Port\": {\n-                                \"description\": \"The port of the proxy server\",\n-                                \"displayName\": \"Proxy Port\",\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\": \"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\": \"Read Permission User List\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proxy Type\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"DIRECT\",\n-                                        \"value\": \"DIRECT\"\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\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\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\": \"SOCKS\",\n-                                        \"value\": \"SOCKS\"\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\": \"DIRECT\",\n-                                \"description\": \"Proxy type used for file transfers\",\n-                                \"displayName\": \"Proxy 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\": \"Proxy Type\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Reject Zero-Byte Files\": {\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-M4\"\n+                                }\n+                            },\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\": \"true\",\n-                                \"description\": \"Determines whether or not Zero-byte files should be rejected without attempting to transfer\",\n-                                \"displayName\": \"Reject Zero-Byte Files\",\n+                                \"defaultValue\": \"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\": \"Reject Zero-Byte Files\",\n+                                \"name\": \"Signer Override\",\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+                            \"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\": \"Remote Group\",\n+                                \"name\": \"Version\",\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+                            \"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\": \"Remote Owner\",\n+                                \"name\": \"Write ACL User List\",\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+                            \"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\": \"Remote Path\",\n+                                \"name\": \"Write Permission User List\",\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+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n-                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"description\": \"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\": \"Send Keep Alive On Timeout\",\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-                            \"Strict Host Key Checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"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\": \"Temporary Filename\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"custom-signer-module-location\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Use Compression\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"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\": \"Username\",\n-                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n                             \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN, SOCKS + 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@@ -36594,59 +39292,77 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.GetSFTP\"\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 that are successfully sent will be routed to success\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that were rejected by the destination system\",\n-                                \"name\": \"reject\"\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\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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-                            \"archive\",\n-                            \"copy\",\n-                            \"egress\",\n-                            \"files\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"sftp\"\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.processors.standard.PutSFTP\",\n-                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\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-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\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                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -36656,2126 +39372,2326 @@\n                             \"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 \\\"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+                                \"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                         \"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+                            \"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\": \"Batch Size\",\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-M4\"\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-                            \"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+                            \"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\": \"JDBC Connection Pool\",\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.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Obtain Generated Keys\": {\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\": \"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+                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n+                                        \"displayName\": \"Use 's3.region' Attribute\",\n+                                        \"value\": \"attribute-defined-region\"\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+                                \"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\": \"Obtain Generated Keys\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Support Fragmented Transactions\": {\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-M4\"\n+                                }\n+                            },\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\": \"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\": \"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\": \"Support Fragmented Transactions\",\n+                                \"name\": \"Signer Override\",\n                                 \"required\": false,\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+                            \"Version\": {\n+                                \"description\": \"The Version of the Object to download\",\n+                                \"displayName\": \"Version\",\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\": \"Version\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"database-session-autocommit\": {\n-                                \"allowableValues\": [\n+                            \"custom-signer-class-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"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\": \"database-session-autocommit\",\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-M4\"\n+                                }\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-M4\"\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-                            \"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+                            \"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\": \"putsql-sql-statement\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rollback-on-failure\": {\n+                            \"requester-pays\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\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\": \"false\",\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\": \"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, 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\": \"rollback-on-failure\",\n+                                \"name\": \"requester-pays\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n-                                \"name\": \"sql.args.N.type\"\n-                            },\n-                            {\n-                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n-                                \"name\": \"sql.args.N.value\"\n-                            },\n-                            {\n-                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n-                                \"name\": \"sql.args.N.format\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\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\": \"A FlowFile is routed to this relationship if the database cannot be updated but attempting the operation again may succeed\",\n-                                \"name\": \"retry\"\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\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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\": 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+                            \"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.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+                        \"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-M4\",\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 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+                            {\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+                                \"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\": \"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                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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-                            \"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+                            \"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\": \"Batch Size\",\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-M4\"\n+                                }\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+                            \"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\": \"Character Set\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\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+                            \"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\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"name\": \"Endpoint Override URL\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"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\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Listing Batch Size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Body\": {\n-                                \"description\": \"The body for the Syslog messages.\",\n-                                \"displayName\": \"Message Body\",\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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"The AWS Region to connect to.\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Body\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Region\",\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+                            \"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\": \"Message Hostname\",\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-M4\"\n+                                }\n                             },\n-                            \"Message Priority\": {\n-                                \"description\": \"The priority for the Syslog messages, excluding < >.\",\n-                                \"displayName\": \"Message Priority\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Priority\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Timestamp\",\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-                            \"Message Version\": {\n-                                \"description\": \"The version for the Syslog messages.\",\n-                                \"displayName\": \"Message Version\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Version\",\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-                            \"Port\": {\n-                                \"description\": \"The port for Syslog communication. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Port\",\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\": \"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\": \"delimiter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\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\": \"UDP\",\n-                                        \"value\": \"UDP\"\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\": \"UDP\",\n-                                \"description\": \"The protocol for Syslog communication.\",\n-                                \"displayName\": \"Protocol\",\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\": \"Protocol\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"TCP\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Protocol\",\n-                                        \"propertyName\": \"Protocol\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\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+                                \"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-                                \"required\": false,\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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Timeout\": {\n-                                \"defaultValue\": \"10 seconds\",\n-                                \"description\": \"The timeout for connecting to and communicating with the syslog server. Does not apply to UDP. Note that Expression language is not evaluated per FlowFile.\",\n-                                \"displayName\": \"Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\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\": \"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-                            \"logs\",\n-                            \"put\",\n-                            \"syslog\",\n-                            \"tcp\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutSyslog\",\n-                        \"typeDescription\": \"Sends Syslog messages to a given host and port over TCP or UDP. Messages are constructed from the \\\"Message ___\\\" properties of the processor which can use expression language to generate messages from incoming FlowFiles. The properties are used to construct messages of the form: (<PRIORITY>)(VERSION )(TIMESTAMP) (HOSTNAME) (BODY) where version is optional.  The constructed messages are checked against regular expressions for RFC5424 and RFC3164 formatted messages. The timestamp can be an RFC5424 timestamp with a format of \\\"yyyy-MM-dd'T'HH:mm:ss.SZ\\\" or \\\"yyyy-MM-dd'T'HH:mm:ss.S+hh:mm\\\", or it can be an RFC3164 timestamp with a format of \\\"MMM d HH:mm:ss\\\". If a message is constructed that does not form a valid Syslog message according to the above description, then it is routed to the invalid relationship. Valid messages are sent to the Syslog server and successes are routed to the success relationship, failures routed to the failure relationship.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"et-time-window\": {\n+                                \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"FLOWFILE_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n+                                        \"propertyDisplayName\": \"Entity Tracking State Cache\",\n+                                        \"propertyName\": \"et-state-cache\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\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\": \"Character Set\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Connection Per FlowFile\": {\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\": \"false\",\n-                                \"description\": \"Specifies whether to send each FlowFile's content on an individual connection.\",\n-                                \"displayName\": \"Connection Per FlowFile\",\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\": \"Connection Per FlowFile\",\n+                                \"name\": \"list-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. This strategy will not pick up any newly added or modified entity if their timestamps are older than the tracked latest timestamp. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracing Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However an additional DistributedMapCache controller service is required and more JVM heap memory is used. For more information on how the 'Entity Tracking Time Window' property works, see the description.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists all entities without any tracking. The same entities will be listed each time this processor is scheduled. It is recommended to change the default run schedule value. Any property that relates to the persisting state will be ignored.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Size of Socket Send Buffer\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"The maximum size of the socket send buffer that should be used. This is a suggestion to the Operating System to indicate how big the socket buffer should be. If this value is set too low, the buffer may fill up before the data can be read, and incoming data will be dropped.\",\n-                                \"displayName\": \"Max Size of Socket Send Buffer\",\n+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\n+                                \"name\": \"min-age\",\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+                            \"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\": \"Port\",\n-                                \"required\": true,\n+                                \"name\": \"prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transmission Strategy\",\n-                                        \"propertyName\": \"Transmission Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"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-                                \"required\": true,\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\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+                            \"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-M4\"\n                                 }\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\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\": \"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-M4\"\n-                                }\n+                                \"name\": \"requester-pays\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Timeout\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-versions\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transmission Strategy\": {\n+                            \"write-s3-object-tags\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send FlowFile content as a single stream\",\n-                                        \"displayName\": \"FlowFile-oriented\",\n-                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"Transmission Strategy\",\n+                                \"name\": \"write-s3-object-tags\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"write-s3-user-metadata\",\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+                            \"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 that are sent successfully to the destination are sent out this relationship.\",\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"tcp\"\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.processors.standard.PutTCP\",\n-                        \"typeDescription\": \"Sends serialized FlowFiles or Records over TCP to a configurable destination with optional support for TLS\",\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Count of records transmitted to configured destination address\",\n-                                \"name\": \"record.count.transmitted\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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+                                \"description\": \"The name of the S3 bucket\",\n+                                \"name\": \"s3.bucket\"\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-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The region of the S3 bucket\",\n+                                \"name\": \"s3.region\"\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\": \"Max Size of Socket Send Buffer\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                            {\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\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+                                \"description\": \"The ETag that can be used to see if the file has changed\",\n+                                \"name\": \"s3.etag\"\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ListenUDP\",\n-                            \"org.apache.nifi.processors.standard.PutTCP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"A boolean indicating if this is the latest version of the object\",\n+                                \"name\": \"s3.isLatest\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\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-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"egress\",\n-                            \"put\",\n-                            \"remote\",\n-                            \"udp\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.PutUDP\",\n-                        \"typeDescription\": \"The PutUDP processor receives a FlowFile and packages the FlowFile content into a single UDP datagram packet which is then transmitted to the configured UDP server. The user must ensure that the FlowFile content being fed to this processor is not larger than the maximum size for the underlying UDP transport. The maximum transport size will vary based on the platform setup but is generally just under 64KB. FlowFiles will be marked as failed if their content is larger than the maximum transport size.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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-                                \"name\": \"initial.maxvalue.<max_value_column>\",\n-                                \"value\": \"Initial maximum value for the specified column\"\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\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-                                \"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+                            \"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\": \"Database Connection Pooling Service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Max Wait Time\",\n+                                \"name\": \"Bucket\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Maximum-value Columns\",\n+                                \"name\": \"Cache Control\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Set Auto Commit\": {\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+                            \"Content Disposition\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"inline\",\n+                                        \"value\": \"inline\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"attachment\",\n+                                        \"value\": \"attachment\"\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+                                \"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\": \"Content Disposition\",\n+                                \"required\": false,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Content Type\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Set Auto Commit\",\n+                                \"name\": \"Endpoint Override URL\",\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+                            \"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\": \"Table Name\",\n-                                \"required\": true,\n+                                \"name\": \"Expiration Time Rule\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"db-fetch-db-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n-                                    },\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\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+                                \"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\": \"db-fetch-db-type\",\n+                                \"name\": \"File Resource Service\",\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+                                \"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-M4\"\n+                                }\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+                            \"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\": \"db-fetch-where-clause\",\n+                                \"name\": \"FullControl User List\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-precision\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Multipart Part Size\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbf-default-scale\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Multipart Threshold\",\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\": \"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+                            \"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\": \"dbf-normalize\",\n+                                \"name\": \"Multipart Upload AgeOff Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether 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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbf-user-logical-types\",\n+                                \"name\": \"Multipart Upload Max Age Threshold\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"initial-load-strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Object Key\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-frags\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n-                                \"required\": true,\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-                            \"transaction-isolation-level\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_NONE\",\n-                                        \"value\": \"0\"\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\": \"TRANSACTION_READ_COMMITTED\",\n-                                        \"value\": \"2\"\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\": \"TRANSACTION_READ_UNCOMMITTED\",\n-                                        \"value\": \"1\"\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\": \"TRANSACTION_REPEATABLE_READ\",\n-                                        \"value\": \"4\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TRANSACTION_SERIALIZABLE\",\n-                                        \"value\": \"8\"\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-                                \"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+                                \"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\": \"transaction-isolation-level\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Specifies an initial max value for max value column(s). Properties should be added in the format `initial.maxvalue.<max_value_column>`. This value is only used the first time the table is accessed (when a Maximum Value Column is specified).\",\n-                                \"expressionLanguageScope\": \"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+                            \"Resource Transfer Source\": {\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\": \"The content of the incoming FlowFile provides the source for transfer\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"FLOWFILE_CONTENT\"\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\": \"The File Resource Service provides the source for transfer\",\n+                                        \"displayName\": \"File Resource Service\",\n+                                        \"value\": \"FILE_RESOURCE_SERVICE\"\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\": \"FLOWFILE_CONTENT\",\n+                                \"description\": \"The source of the content to be transferred\",\n+                                \"displayName\": \"Resource Transfer Source\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Columns to Return\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resource Transfer Source\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Database Connection Pooling Service\": {\n-                                \"description\": \"The Controller Service that is used to obtain a connection to the database.\",\n-                                \"displayName\": \"Database Connection Pooling 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\": \"Database Connection Pooling 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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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-                                \"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-                            \"Set Auto Commit\": {\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-                                \"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\": \"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\": \"Set Auto Commit\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Signer Override\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n-                                \"displayName\": \"Table Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"db-fetch-db-type\": {\n+                            \"Storage Class\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Generates ANSI SQL\",\n-                                        \"displayName\": \"Generic\",\n-                                        \"value\": \"Generic\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DeepArchive\",\n+                                        \"value\": \"DeepArchive\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL\",\n-                                        \"displayName\": \"Oracle\",\n-                                        \"value\": \"Oracle\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Glacier\",\n+                                        \"value\": \"Glacier\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n-                                        \"displayName\": \"Oracle 12+\",\n-                                        \"value\": \"Oracle 12+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"GlacierInstantRetrieval\",\n+                                        \"value\": \"GlacierInstantRetrieval\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n-                                        \"displayName\": \"MS SQL 2012+\",\n-                                        \"value\": \"MS SQL 2012+\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"IntelligentTiering\",\n+                                        \"value\": \"IntelligentTiering\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n-                                        \"displayName\": \"MS SQL 2008\",\n-                                        \"value\": \"MS SQL 2008\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"OneZoneInfrequentAccess\",\n+                                        \"value\": \"OneZoneInfrequentAccess\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates MySQL compatible SQL\",\n-                                        \"displayName\": \"MySQL\",\n-                                        \"value\": \"MySQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Outposts\",\n+                                        \"value\": \"Outposts\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n-                                        \"displayName\": \"PostgreSQL\",\n-                                        \"value\": \"PostgreSQL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ReducedRedundancy\",\n+                                        \"value\": \"ReducedRedundancy\"\n                                     },\n                                     {\n-                                        \"description\": \"Generates Phoenix compliant SQL\",\n-                                        \"displayName\": \"Phoenix\",\n-                                        \"value\": \"Phoenix\"\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\": \"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\": \"Standard\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Storage Class\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-fetch-db-type\",\n+                                \"name\": \"Storage Class\",\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+                            \"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\": \"db-fetch-sql-query\",\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-                            \"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+                            \"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\": \"db-fetch-where-clause\",\n+                                \"name\": \"Write Permission User List\",\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+                            \"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\": \"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\": \"canned-acl\",\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+                            \"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\": \"dbf-default-scale\",\n+                                \"name\": \"custom-signer-class-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbf-user-logical-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"custom-signer-module-location\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"CustomSignerType\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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\": \"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\": \"dbf-user-logical-types\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-M4\"\n+                                }\n                             },\n-                            \"initial-load-strategy\": {\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-M4\"\n+                                }\n+                            },\n+                            \"s3-object-remove-tags-prefix\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Loads all existing rows from the database table.\",\n-                                        \"displayName\": \"Start at Beginning\",\n-                                        \"value\": \"Start at Beginning\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Loads only the newly inserted or updated rows based on the maximum value(s) of the column(s) configured in the 'Maximum-value Columns' property.\",\n-                                        \"displayName\": \"Start at Current Maximum Values\",\n-                                        \"value\": \"Start at Current Maximum Values\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Start at Beginning\",\n-                                \"description\": \"How to handle existing rows in the database table when the processor is started for the first time (or its state has been cleared). The property will be ignored, if any 'initial.maxvalue.*' dynamic property has also been configured.\",\n-                                \"displayName\": \"Initial Load Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"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\": \"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+                                \"name\": \"s3-object-remove-tags-prefix\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-max-rows\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"s3-object-tags-prefix\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbt-output-batch-size\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of output FlowFiles to queue before committing the process session. When set to zero, the session will be committed when all result set rows have been processed and the output FlowFiles are ready for transfer to the downstream relationship. For large result sets, this can cause a large burst of FlowFiles to be transferred at the end of processor execution. If this property is set, then when the specified number of FlowFiles are ready for transfer, then the session will be committed, thus releasing the FlowFiles to the downstream relationship. NOTE: The maxvalue.* and fragment.count attributes will not be set on FlowFiles when this property is set.\",\n-                                \"displayName\": \"Output Batch Size\",\n+                            \"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\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"qdbt-output-batch-size\",\n+                                \"name\": \"s3-temporary-directory-multipart\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"qdbtr-normalize\": {\n+                            \"server-side-encryption\": {\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\": \"AES256\",\n+                                        \"value\": \"AES256\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to change characters in column names when creating the output schema. For example, colons and periods will be changed to underscores.\",\n-                                \"displayName\": \"Normalize Table/Column Names\",\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n+                                \"displayName\": \"Server Side Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"qdbtr-normalize\",\n+                                \"name\": \"server-side-encryption\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\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\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"database\",\n-                            \"jdbc\",\n-                            \"query\",\n-                            \"record\",\n-                            \"select\",\n-                            \"sql\"\n-                        ],\n-                        \"triggerSerially\": true,\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-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Name of the table being queried\",\n-                                \"name\": \"tablename\"\n-                            },\n-                            {\n-                                \"description\": \"The number of rows selected by the query\",\n-                                \"name\": \"querydbtable.row.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"Each attribute contains the observed maximum value of a specified 'Maximum-value Column'. The suffix of the attribute is the name of the column. If Output Batch Size is set, then this attribute will not be populated.\",\n-                                \"name\": \"maxvalue.*\"\n-                            },\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records output by the Record Writer.\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-                            \"cache-schema\": {\n+                            \"use-chunked-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"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\": \"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\": \"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-                                \"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+                                \"name\": \"use-chunked-encoding\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"include-zero-record-flowfiles\": {\n+                            \"use-path-style-access\": {\n                                 \"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\": \"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\": \"include-zero-record-flowfiles\",\n-                                \"required\": true,\n+                                \"name\": \"use-path-style-access\",\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-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-writer\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"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+                                \"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\": \"The original FlowFile is routed to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsDynamicRelationships\": false,\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+                            \"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.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+                        \"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-M4\",\n+                        \"writesAttributes\": [\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+                                \"description\": \"The URL that can be used to access the S3 object\",\n+                                \"name\": \"s3.url\"\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+                                \"description\": \"The S3 bucket where the Object was put in S3\",\n+                                \"name\": \"s3.bucket\"\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+                                \"description\": \"The S3 key within where the Object was put in S3\",\n+                                \"name\": \"s3.key\"\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-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The S3 content type of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contenttype\"\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 version of the S3 Object that was put to S3\",\n+                                \"name\": \"s3.version\"\n                             },\n                             {\n-                                \"description\": \"The number of records selected by the query\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\n+                            },\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-                                \"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-M4\"\n-                                }\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.UpdateRecord\"\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"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+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n+                            },\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-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The ETag of the S3 Object\",\n+                                \"name\": \"s3.etag\"\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 content disposition of the S3 Object that put in S3\",\n+                                \"name\": \"s3.contentdisposition\"\n+                            },\n+                            {\n+                                \"description\": \"The cache-control header of the S3 Object\",\n+                                \"name\": \"s3.cachecontrol\"\n+                            },\n+                            {\n+                                \"description\": \"The uploadId used to upload the Object to S3\",\n+                                \"name\": \"s3.uploadId\"\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+                            },\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -38783,793 +41699,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\": \"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+                            \"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 Reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"Record Writer\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Bucket\",\n                                 \"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-M4\"\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\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"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-                            {\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+                                \"sensitive\": false\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-M4\",\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"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\": \"Character Set\",\n+                                \"name\": \"Communications 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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Evaluation Mode\",\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-                            \"Line-by-Line Evaluation Mode\": {\n+                            \"Region\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"All\",\n-                                        \"value\": \"All\"\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\": \"First-Line\",\n-                                        \"value\": \"First-Line\"\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\": \"Last-Line\",\n-                                        \"value\": \"Last-Line\"\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\": \"Except-First-Line\",\n-                                        \"value\": \"Except-First-Line\"\n+                                        \"description\": \"AWS Region Code : us-east-2\",\n+                                        \"displayName\": \"US East (Ohio)\",\n+                                        \"value\": \"us-east-2\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Except-Last-Line\",\n-                                        \"value\": \"Except-Last-Line\"\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\": \"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\": \"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\": \"Line-by-Line Evaluation Mode\",\n-                                \"required\": false,\n+                                \"name\": \"Region\",\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 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+                            \"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\": \"Maximum Buffer Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"(?s)(^.*$)\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Regex Replace\",\n-                                            \"Literal Replace\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Search Value to search for in the FlowFile content. Only used for 'Literal Replace' and 'Regex Replace' matching strategies\",\n-                                \"displayName\": \"Search Value\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Regular Expression\",\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-M4\"\n+                                }\n                             },\n-                            \"Replacement Strategy\": {\n+                            \"Signer Override\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Default Signature\",\n+                                        \"value\": \"Default Signature\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Signature Version 4\",\n+                                        \"value\": \"AWSS3V4SignerType\"\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\": \"Signature Version 2\",\n+                                        \"value\": \"S3SignerType\"\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\": \"Custom Signature\",\n+                                        \"value\": \"CustomSignerType\"\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\": \"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\": \"Replacement Strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Signer Override\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Replacement Value\": {\n-                                \"defaultValue\": \"$1\",\n-                                \"dependencies\": [\n+                            \"append-tag\": {\n+                                \"allowableValues\": [\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Replacement Value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"append-tag\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Text to Append\": {\n+                            \"custom-signer-class-name\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Surround\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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+                                \"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\": \"Text to Append\",\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-                            \"Text to Prepend\": {\n+                            \"custom-signer-module-location\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"Surround\"\n+                                            \"CustomSignerType\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Replacement Strategy\",\n-                                        \"propertyName\": \"Replacement Strategy\"\n+                                        \"propertyDisplayName\": \"Signer Override\",\n+                                        \"propertyName\": \"Signer Override\"\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-                                \"dynamic\": 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-                            {\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-                            },\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"Character Set\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Mapping File\": {\n-                                \"description\": \"The name of the file (including the full path) containing the Mappings.\",\n-                                \"displayName\": \"Mapping File\",\n+                                \"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\": \"Mapping File\",\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\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"DIRECTORY\"\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-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\": \"Mapping File Refresh Interval\",\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-M4\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Matching Group\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"tag-key\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Buffer Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n-                                \"displayName\": \"Maximum Buffer Size\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Buffer Size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"tag-value\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Regular Expression\": {\n-                                \"defaultValue\": \"\\\\S+\",\n-                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n-                                \"displayName\": \"Regular Expression\",\n+                            \"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\": \"Regular Expression\",\n-                                \"required\": true,\n+                                \"name\": \"version\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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 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+                                \"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\": \"FlowFiles that could not be updated are routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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-                            \"Change\",\n-                            \"Mapping\",\n-                            \"Modify\",\n-                            \"Regex\",\n-                            \"Regular Expression\",\n-                            \"Replace\",\n-                            \"Text\",\n-                            \"Update\"\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.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+                        \"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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\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-                                \"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\": \"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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"penalize-retries\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If set to 'true', this Processor will penalize input FlowFiles before passing them to the 'retry' relationship. This does not apply to the 'retries_exceeded' relationship.\",\n-                                \"displayName\": \"Penalize Retries\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"penalize-retries\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"retry-attribute\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"description\": \"The tags associated with the S3 object will be written as part of the FlowFile attributes\",\n+                                \"name\": \"s3.tag.___\"\n                             },\n-                            \"reuse-mode\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, fail the FlowFile regardless of current retry count\",\n-                                        \"displayName\": \"Fail on Reuse\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a warning message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Warn on Reuse\",\n-                                        \"value\": \"warn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"If the RetryFlowFile's UUID does not match the FlowFile's retry UUID, log a debug message before resetting the retry attribute and UUID for this instance\",\n-                                        \"displayName\": \"Reset Reuse\",\n-                                        \"value\": \"reset\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Defines how the Processor behaves if the retry FlowFile has a different retry UUID than the instance that received the FlowFile. This generally means that the attribute was not reset after being successfully retried by a previous instance of this processor.\",\n-                                \"displayName\": \"Reuse Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reuse-mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Will read the attribute or attribute expression language result as defined in 'Retry Attribute'\",\n-                                \"name\": \"Retry Attribute\"\n-                            }\n-                        ],\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Input FlowFile has exceeded the configured maximum retry count, do not pass this relationship back to the input Processor to terminate the limited feedback loop.\",\n-                                \"name\": \"retries_exceeded\"\n+                                \"description\": \"The class name of the exception thrown during processor execution\",\n+                                \"name\": \"s3.exception\"\n                             },\n                             {\n-                                \"description\": \"Input FlowFile has not exceeded the configured maximum retry count, pass this relationship back to the input Processor to create a limited feedback loop.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"The S3 supplied detail from the failed operation\",\n+                                \"name\": \"s3.additionalDetails\"\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-M4\",\n-                        \"writesAttributes\": [\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"s3.statusCode\"\n+                            },\n                             {\n-                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n-                                \"name\": \"Retry Attribute\"\n+                                \"description\": \"The S3 moniker of the failed operation\",\n+                                \"name\": \"s3.errorCode\"\n                             },\n                             {\n-                                \"description\": \"User defined retry attribute with .uuid that determines what processor retried the FlowFile last\",\n-                                \"name\": \"Retry Attribute .uuid\"\n+                                \"description\": \"The S3 exception message from the failed operation\",\n+                                \"name\": \"s3.errorMessage\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -39579,533 +42210,442 @@\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+                                \"description\": \"User specified dynamic Properties are added as attributes to the notification\",\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+                                \"name\": \"A name of an attribute to be added to the notification\",\n+                                \"value\": \"The attribute value\"\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-                                    {\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-                                        \"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-                                \"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+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Routing Strategy\": {\n+                            \"ARN Type\": {\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\": \"The ARN is the name of a topic\",\n+                                        \"displayName\": \"Topic ARN\",\n+                                        \"value\": \"Topic ARN\"\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\": \"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\": \"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\": \"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\": \"Routing Strategy\",\n+                                \"name\": \"ARN Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that do not match any user-define expression will be routed here\",\n-                                \"name\": \"unmatched\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\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-                                \"notes\": \"\"\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+                            \"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-M4\"\n+                                }\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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-                                \"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+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Amazon Resource Name (ARN)\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n                             \"Character Set\": {\n                                 \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The Character Set in which the file is encoded\",\n+                                \"description\": \"The character set in which the FlowFile's content is encoded\",\n                                 \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n                                 \"name\": \"Character Set\",\n                                 \"required\": true,\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+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Buffer Size\",\n+                                \"name\": \"Communications Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Match Requirement\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must match exactly\",\n-                                        \"value\": \"content must match exactly\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"content must contain match\",\n-                                        \"value\": \"content must contain match\"\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+                            \"Deduplication Message ID\": {\n+                                \"description\": \"The token used for deduplication of sent messages\",\n+                                \"displayName\": \"Deduplication Message ID\",\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Deduplication Message ID\",\n+                                \"required\": false,\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+                            \"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\": \"Grouping Regular Expression\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"E-mail Subject\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Case\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Case\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ignore Leading/Trailing Whitespace\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message Group ID\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Matching Strategy\": {\n+                            \"Region\": {\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+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\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+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line contains the property value\",\n-                                        \"displayName\": \"Contains\",\n-                                        \"value\": \"Contains\"\n+                                        \"description\": \"AWS Region Code : ap-east-1\",\n+                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n+                                        \"value\": \"ap-east-1\"\n                                     },\n                                     {\n-                                        \"description\": \"Match lines based on whether the line equals the property value\",\n-                                        \"displayName\": \"Equals\",\n-                                        \"value\": \"Equals\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\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\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\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\": \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"Specifies how to evaluate each line of incoming text against the user-defined properties.\",\n-                                \"displayName\": \"Matching Strategy\",\n+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Matching Strategy\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Routing 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\": \"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-M4\"\n+                                }\n+                            },\n+                            \"Use JSON Structure\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Lines will be routed to each relationship whose corresponding expression evaluates to 'true'\",\n-                                        \"displayName\": \"Route to each matching Property Name\",\n-                                        \"value\": \"Route to each matching Property Name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Requires that all user-defined expressions evaluate to 'true' for the line to be considered a match\",\n-                                        \"displayName\": \"Route to 'matched' if line matches all conditions\",\n-                                        \"value\": \"Route to 'matched' if line matches all conditions\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"Routing Strategy\",\n+                                \"name\": \"Use JSON Structure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"The original input file will be routed to this destination when the lines have been successfully routed to 1 or more relationships\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Data that does not satisfy the required user-defined rules will be routed to this Relationship\",\n-                                \"name\": \"unmatched\"\n+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Expression Language\",\n-                            \"Regular Expression\",\n-                            \"attributes\",\n-                            \"csv\",\n-                            \"delimited\",\n-                            \"detect\",\n-                            \"filter\",\n-                            \"find\",\n-                            \"logs\",\n-                            \"regex\",\n-                            \"regexp\",\n-                            \"routing\",\n-                            \"search\",\n-                            \"string\",\n-                            \"text\"\n+                            \"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.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-M4\",\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+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40118,547 +42658,369 @@\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+                            \"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-reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing results to a FlowFile\",\n-                                \"displayName\": \"Record Writer\",\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\": \"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-M4\"\n-                                }\n-                            },\n-                            \"sample-record-interval\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"interval\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the number of records to skip before writing a record to the outgoing FlowFile. This property is only used if Sampling Strategy is set to Interval Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, a value of one (1) will cause all records to be included, and a value of two (2) will cause half the records to be included, and so on.\",\n-                                \"displayName\": \"Sampling Interval\",\n-                                \"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-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"probabilistic\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Sampling Strategy\",\n-                                        \"propertyName\": \"sample-record-sampling-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n-                                \"displayName\": \"Sampling Probability\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"sample-record-probability\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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\": \"sample-record-random-seed\",\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-                            \"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+                            \"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\": \"sample-record-range\",\n+                                \"name\": \"Queue URL\",\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+                            \"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\": \"sample-record-reservoir\",\n+                                \"name\": \"Receipt Handle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sample-record-sampling-strategy\": {\n+                            \"Region\": {\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+                                        \"description\": \"AWS Region Code : us-gov-east-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-East)\",\n+                                        \"value\": \"us-gov-east-1\"\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+                                        \"description\": \"AWS Region Code : us-gov-west-1\",\n+                                        \"displayName\": \"AWS GovCloud (US-West)\",\n+                                        \"value\": \"us-gov-west-1\"\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+                                        \"description\": \"AWS Region Code : af-south-1\",\n+                                        \"displayName\": \"Africa (Cape Town)\",\n+                                        \"value\": \"af-south-1\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            {\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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\": \"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-                            },\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\": \"Dictionary Filter Pattern\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Match Criteria\": {\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\": \"At Least 1 Must Match\",\n-                                        \"value\": \"At Least 1 Must Match\"\n+                                        \"description\": \"AWS Region Code : ap-south-2\",\n+                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n+                                        \"value\": \"ap-south-2\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-                            {\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n+                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n+                                        \"value\": \"ap-southeast-3\"\n+                                    },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"text\",\n-                                        \"value\": \"text\"\n+                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n+                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n+                                        \"value\": \"ap-southeast-4\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"binary\",\n-                                        \"value\": \"binary\"\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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\": \"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+                                \"defaultValue\": \"us-west-2\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Region\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Dictionary Encoding\",\n+                                \"name\": \"Region\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Dictionary File\": {\n-                                \"description\": \"The filename of the terms dictionary\",\n-                                \"displayName\": \"Dictionary File\",\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\": \"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+                                \"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-M4\"\n+                                }\n                             },\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"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\": \"Segment Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n+                            \"org.apache.nifi.processors.aws.sqs.GetSQS\",\n+                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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+                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile will be sent to this relationship\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles are routed to success 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-                            \"segment\",\n-                            \"split\"\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.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+                        \"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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40667,288 +43029,1312 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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-                            },\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-                            \"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+                            \"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\": \"Byte Sequence Location\",\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-M4\"\n+                                }\n                             },\n-                            \"Keep Byte Sequence\": {\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\": \"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-                            },\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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JsonPath Expression\",\n+                                \"name\": \"Auto Delete Messages\",\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+                            \"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\": \"Max String Length\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Null Value Representation\": {\n+                            \"Character Set\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"empty string\",\n-                                        \"value\": \"empty string\"\n+                                        \"displayName\": \"Big5\",\n+                                        \"value\": \"Big5\"\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+                                        \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Null Value Representation\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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-M4\"\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-M4\"\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\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"FlowFiles are routed to success 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-                        \"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+                            \"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.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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n+                                \"description\": \"The MD5 sum of the message\",\n+                                \"name\": \"hash.value\"\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\": \"MD5\",\n+                                \"name\": \"hash.algorithm\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The unique identifier of the SQS message\",\n+                                \"name\": \"sqs.message.id\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\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\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-aws-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -40956,134 +44342,416 @@\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 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                         \"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+                            \"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 Reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.processors.aws.credentials.provider.service.AWSCredentialsProviderService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\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\": \"Record Writer\",\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\": \"Queue URL\",\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-isoe-west-1\",\n+                                        \"displayName\": \"EU ISOE West\",\n+                                        \"value\": \"eu-isoe-west-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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Records Per Split\",\n-                                \"required\": true,\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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 cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles are routed to failure relationship\",\n                                 \"name\": \"failure\"\n                             },\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+                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"name\": \"success\"\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-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"schema\",\n-                            \"split\",\n-                            \"text\"\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.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.aws.sqs.PutSQS\",\n+                        \"typeDescription\": \"Publishes a message to an Amazon Simple Queuing Service Queue\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-asana-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41092,554 +44760,1414 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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+                        \"primaryNodeOnly\": true,\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+                            \"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\": \"Header Line Count\",\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-M4\"\n+                                }\n+                            },\n+                            \"asana-object-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Tasks\",\n+                                        \"value\": \"asana-collect-tasks\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Task Attachments\",\n+                                        \"value\": \"asana-collect-task-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect projects of the workspace.\",\n+                                        \"displayName\": \"Projects\",\n+                                        \"value\": \"asana-collect-projects\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect tags of the workspace.\",\n+                                        \"displayName\": \"Tags\",\n+                                        \"value\": \"asana-collect-tags\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the workspace.\",\n+                                        \"displayName\": \"Users\",\n+                                        \"value\": \"asana-collect-users\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified project.\",\n+                                        \"displayName\": \"Members of a Project\",\n+                                        \"value\": \"asana-collect-project-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect teams of the workspace.\",\n+                                        \"displayName\": \"Teams\",\n+                                        \"value\": \"asana-collect-teams\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect users assigned to the specified team.\",\n+                                        \"displayName\": \"Team Members\",\n+                                        \"value\": \"asana-collect-team-members\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n+                                        \"displayName\": \"Stories of Tasks\",\n+                                        \"value\": \"asana-collect-stories\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect status updates of the specified project.\",\n+                                        \"displayName\": \"Status Updates of a Project\",\n+                                        \"value\": \"asana-collect-project-status-updates\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect attached files of project status updates.\",\n+                                        \"displayName\": \"Attachments of Status Updates\",\n+                                        \"value\": \"asana-collect-project-status-attachments\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n+                                        \"displayName\": \"Events of a Project\",\n+                                        \"value\": \"asana-collect-project-events\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"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-                            \"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+                            \"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\": \"Header Line Marker Characters\",\n-                                \"required\": false,\n+                                \"name\": \"asana-output-batch-size\",\n+                                \"required\": true,\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+                            \"asana-project-name\": {\n+                                \"dependencies\": [\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\": \"Line Split Count\",\n+                                \"name\": \"asana-project-name\",\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+                            \"asana-section-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects in this section. Case sensitive.\",\n+                                \"displayName\": \"Section Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Fragment Size\",\n+                                \"name\": \"asana-section-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Remove Trailing Newlines\": {\n-                                \"allowableValues\": [\n+                            \"asana-tag-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"asana-collect-task-attachments\",\n+                                            \"asana-collect-stories\",\n+                                            \"asana-collect-tasks\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Object Type\",\n+                                        \"propertyName\": \"asana-object-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fetch only objects having this tag. Case sensitive.\",\n+                                \"displayName\": \"Tag\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"asana-tag-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"asana-team-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\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\": \"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\": \"Team name. Case sensitive.\",\n+                                \"displayName\": \"Team\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Remove Trailing Newlines\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\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+                                \"description\": \"Newly collected objects are routed to this relationship.\",\n+                                \"name\": \"new\"\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+                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n+                                \"name\": \"updated\"\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\": \"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                         \"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\": \"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+                                \"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-                            \"split\",\n-                            \"text\"\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.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.asana.GetAsanaObject\",\n+                        \"typeDescription\": \"This processor collects data from Asana\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"Global ID of the object in Asana.\",\n+                                \"name\": \"asana.gid\"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-record-sink-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\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-                            {\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+                            \"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-                            {\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+                            \"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-                            {\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+                            \"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-M4\"\n+                                }\n                             },\n-                            {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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+                                \"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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"smtp-ssl\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Flag indicating whether SSL should be enabled\",\n+                                \"displayName\": \"SMTP SSL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SMTP Auth\",\n+                                        \"propertyName\": \"smtp-auth\"\n+                                    }\n+                                ],\n+                                \"description\": \"Username for the SMTP account\",\n+                                \"displayName\": \"SMTP Username\",\n+                                \"dynamic\": false,\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+                            \"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-                                \"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.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"logsink-log-level\": {\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\": \"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\": \"Split Depth\",\n+                                \"name\": \"logsink-log-level\",\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid XML), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-                            {\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+                            \"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\": \"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-M4\"\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-                                \"description\": \"All segments of the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n+                                \"version\": \"2.0.0-M4\"\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+                        \"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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-record-sink-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\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+                                \"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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"xml\"\n+                            \"lookup\",\n+                            \"record\",\n+                            \"sink\"\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-M4\",\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+                        \"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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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+                            \"Request Expiration\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"Specifies how long an HTTP Request should be left unanswered before being evicted from the cache and being responded to with a Service Unavailable status code\",\n+                                \"displayName\": \"Request Expiration\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Expiration\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.http.HttpContextMap\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"http\",\n+                            \"request\",\n+                            \"response\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.http.StandardHttpContextMap\",\n+                        \"typeDescription\": \"Provides the ability to store and retrieve HTTP requests and responses external to a Processor, so that multiple Processors can interact with the same HTTP request.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-cf-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\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+                            \"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-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\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-M4\"\n                             }\n-                        ]\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-distributed-cache-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"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+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Communications Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\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-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"explicitRestrictions\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\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-M4\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"File Location\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"State is stored locally. Each node in a cluster will tail a different file.\",\n-                                        \"displayName\": \"Local\",\n-                                        \"value\": \"Local\"\n-                                    },\n-                                    {\n-                                        \"description\": \"State is located on a remote resource. This Processor will store state across the cluster so that it can be run on Primary Node Only and a new Primary Node can pick up where the last one left off.\",\n-                                        \"displayName\": \"Remote\",\n-                                        \"value\": \"Remote\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Local\",\n-                                \"description\": \"Specifies where the state is located either local or cluster so that state can be stored appropriately in order to ensure that all data is consumed without duplicating data upon restart of NiFi\",\n-                                \"displayName\": \"State Location\",\n+                            \"Communications Timeout\": {\n+                                \"defaultValue\": \"30 secs\",\n+                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n+                                \"displayName\": \"Communications Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Location\",\n+                                \"name\": \"Communications Timeout\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"File to Tail\",\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-M4\"\n+                                }\n+                            },\n+                            \"Server Hostname\": {\n+                                \"description\": \"The name of the server that is running the DistributedSetCacheServer service\",\n+                                \"displayName\": \"Server Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Server Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Initial Start Position\": {\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\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\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n                                     },\n                                     {\n-                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n-                                        \"displayName\": \"Current Time\",\n-                                        \"value\": \"Current Time\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\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+                                \"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\": \"Initial Start Position\",\n+                                \"name\": \"Eviction Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Line Start Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"Single file\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Tailing mode\",\n-                                        \"propertyName\": \"tail-mode\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n-                                \"displayName\": \"Line Start Pattern\",\n+                            \"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\": \"Line Start Pattern\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Buffer Size\": {\n-                                \"defaultValue\": \"64 KB\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Line Start Pattern\",\n-                                        \"propertyName\": \"Line Start Pattern\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n-                                \"displayName\": \"Max Buffer Size\",\n+                            \"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\": \"Max Buffer Size\",\n-                                \"required\": true,\n+                                \"name\": \"Persistence Directory\",\n+                                \"required\": false,\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+                            \"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\": \"Post-Rollover Tail Period\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\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+                            \"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\": \"Rolling Filename Pattern\",\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-M4\"\n+                                }\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+                            \"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\": \"pre-allocated-buffer-size\",\n-                                \"required\": true,\n+                                \"name\": \"maximum-read-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"reread-on-nul\": {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Eviction Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Least Frequently Used\",\n+                                        \"value\": \"Least Frequently Used\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Least Recently Used\",\n+                                        \"value\": \"Least Recently Used\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"First In, First Out\",\n+                                        \"value\": \"First In, First Out\"\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\": \"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\": \"reread-on-nul\",\n-                                \"required\": false,\n+                                \"name\": \"Eviction Strategy\",\n+                                \"required\": true,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"tail-base-directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Cache Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Persistence Directory\": {\n+                                \"description\": \"If specified, the cache will be persisted in the given directory; if not specified, the cache will be in-memory only\",\n+                                \"displayName\": \"Persistence Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Persistence Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"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+                            \"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\": \"tail-mode\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\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+                            \"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\": \"tailfile-lookup-frequency\",\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-M4\"\n+                                }\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+                            \"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\": \"tailfile-maximum-age\",\n+                                \"name\": \"maximum-read-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"tailfile-recursive-lookup\": {\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-avro-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-avro-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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\": \"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\": \"tailfile-recursive-lookup\",\n+                                \"name\": \"Count Items\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Fingerprint Algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"CRC-64-AVRO\",\n+                                        \"value\": \"CRC-64-AVRO\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SHA-256\",\n+                                        \"value\": \"SHA-256\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"CRC-64-AVRO\",\n+                                \"description\": \"The algorithm used to generate the schema fingerprint. Available choices are based on the Avro recommended practices for fingerprint generation.\",\n+                                \"displayName\": \"Fingerprint Algorithm\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Fingerprint Algorithm\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            },\n+                            \"Metadata Keys\": {\n+                                \"description\": \"A comma-separated list of keys indicating key/value pairs to extract from the Avro file header. The key 'avro.schema' can be used to extract the full schema in JSON format, and 'avro.codec' can be used to extract the codec name if one exists.\",\n+                                \"displayName\": \"Metadata Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Metadata Keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles are routed to this Relationship.\",\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"log\",\n-                            \"source\",\n-                            \"tail\",\n-                            \"text\"\n+                            \"avro\",\n+                            \"metadata\",\n+                            \"schema\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Path of the original file the flow file comes from.\",\n-                                \"name\": \"tailfile.original.path\"\n+                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n+                                \"name\": \"schema.type\"\n+                            },\n+                            {\n+                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n+                                \"name\": \"schema.name\"\n+                            },\n+                            {\n+                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n+                                \"name\": \"schema.fingerprint\"\n+                            },\n+                            {\n+                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n+                                \"name\": \"item.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-avro-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41647,173 +46175,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\": \"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\": \"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-                            \"cache-size\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"Maximum number of stylesheets to cache. Zero disables the cache.\",\n-                                \"displayName\": \"Cache size\",\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\": \"cache-size\",\n+                                \"name\": \"Output 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+                            \"Output Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Avro's object container file format\",\n+                                        \"displayName\": \"Datafile\",\n+                                        \"value\": \"Datafile\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Bare Avro records\",\n+                                        \"displayName\": \"Bare Record\",\n+                                        \"value\": \"Bare Record\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Datafile\",\n+                                \"description\": \"Determines the format of the output. Either Avro Datafile, or bare record. Bare record output is only intended for use with systems that already require it, and shouldn't be needed for normal use.\",\n+                                \"displayName\": \"Output Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"name\": \"Output Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"indent-output\": {\n+                            \"Split Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Split at Record boundaries\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to indent the output.\",\n-                                \"displayName\": \"Indent\",\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\": \"indent-output\",\n+                                \"name\": \"Split Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"secure-processing\": {\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 mitigate various XML-related attacks like XXE (XML External Entity) attacks.\",\n-                                \"displayName\": \"Secure processing\",\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\": \"secure-processing\",\n+                                \"name\": \"Transfer Metadata\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"xslt-controller\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"xslt-controller-key\": {\n-                                \"description\": \"Key used to retrieve the XSLT definition from the XSLT lookup controller. This property must be set when using the XSLT controller property.\",\n-                                \"displayName\": \"XSLT Lookup key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"xslt-controller-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"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 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\": \"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\": 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-                            \"transform\",\n-                            \"xml\",\n-                            \"xslt\"\n+                            \"avro\",\n+                            \"split\"\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.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-M4\"\n-                    },\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-geohash-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-geohash-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -41826,237 +46351,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-                            \"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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n+                                \"name\": \"geohash-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Filename Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n+                            \"geohash-level\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"zip\",\n-                                            \"use mime.type attribute\"\n+                                            \"ENCODE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"mode\"\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\": \"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\": \"Filename Character Set\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"geohash-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Packaging Format\": {\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+                            },\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\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"tar\",\n-                                        \"value\": \"tar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"zip\",\n-                                        \"value\": \"zip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v3\",\n-                                        \"value\": \"flowfile-stream-v3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"flowfile-stream-v2\",\n-                                        \"value\": \"flowfile-stream-v2\"\n+                                        \"displayName\": \"ENCODE\",\n+                                        \"value\": \"ENCODE\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"flowfile-tar-v1\",\n-                                        \"value\": \"flowfile-tar-v1\"\n+                                        \"displayName\": \"DECODE\",\n+                                        \"value\": \"DECODE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"use mime.type attribute\",\n-                                \"description\": \"The Packaging Format used to create the file\",\n-                                \"displayName\": \"Packaging Format\",\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\": \"Packaging Format\",\n+                                \"name\": \"mode\",\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+                            \"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\": \"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-M4\"\n+                                }\n                             },\n-                            \"allow-stored-entries-wdd\": {\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\": \"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-M4\"\n+                                }\n+                            },\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"displayName\": \"SPLIT\",\n+                                        \"value\": \"SPLIT\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"zip\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Packaging Format\",\n-                                        \"propertyName\": \"Packaging Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRE\",\n+                                        \"value\": \"REQUIRE\"\n                                     }\n                                 ],\n-                                \"description\": \"Some zip archives contain stored entries with data descriptors which by spec should not happen.  If this property is true they will be read anyway.  If false and such an entry is discovered the zip will fail to process.\",\n-                                \"displayName\": \"Allow Stored Entries With Data Descriptor\",\n+                                \"defaultValue\": \"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\": \"allow-stored-entries-wdd\",\n+                                \"name\": \"routing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the <Packaging Format> property is set to use mime.type attribute, this attribute is used to determine the FlowFile's MIME Type. In this case, if the attribute is set to application/tar, the TAR Packaging Format will be used. If the attribute is set to application/zip, the ZIP Packaging Format will be used. If the attribute is set to application/flowfile-v3 or application/flowfile-v2 or application/flowfile-v1, the appropriate FlowFile Packaging Format will be used. If this attribute is missing, the FlowFile will be routed to 'failure'. Otherwise, if the attribute's value is not one of those mentioned above, the FlowFile will be routed to 'success' without being unpacked. Use the File Filter property only extract files matching a specific regular expression.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.MergeContent\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n+                                \"description\": \"Flowfiles that are successfully encoded or decoded will be routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"description\": \"Flowfiles that cannot be encoded or decoded will be routed to failure\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\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-                            \"Unpack\",\n-                            \"archive\",\n-                            \"flowfile-stream\",\n-                            \"flowfile-stream-v3\",\n-                            \"tar\",\n-                            \"un-merge\",\n-                            \"zip\"\n+                            \"geo\",\n+                            \"geohash\",\n+                            \"record\"\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+                        \"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-M4\",\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\": \"The MIME type indicated 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 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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-evtx-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-evtx-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -42069,2484 +46594,2141 @@\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-                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"counter-name\",\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+                            \"granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Record\",\n+                                        \"value\": \"Record\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Chunk\",\n+                                        \"value\": \"Chunk\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"File\"\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                                 \"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\": \"granularity\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The name of the counter to update/get.\",\n-                                \"name\": \"counterName\"\n+                                \"description\": \"The filename of the evtx file\",\n+                                \"name\": \"filename\"\n                             }\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Counter was updated/retrieved\",\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"counter\",\n-                            \"debug\",\n-                            \"instrumentation\"\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.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.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-M4\"\n-                    },\n+                        \"version\": \"2.0.0-M4\",\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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-slack-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                            \"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+                            \"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\": \"db-type\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"access-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\n+                                \"name\": \"api-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.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-catalog-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"channel-id\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-create-table\": {\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-                                    },\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+                            \"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\": \"updatedatabasetable-create-table\",\n+                                \"name\": \"input-character-set\",\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+                            \"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\": \"updatedatabasetable-dbcp-service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"updatedatabasetable-primary-keys\": {\n-                                \"dependencies\": [\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-primary-keys\",\n-                                \"required\": 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-M4\"\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-slack-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"updatedatabasetable-query-timeout\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Channels\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-column-identifiers\": {\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\": \"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\": \"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\": \"updatedatabasetable-quoted-column-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Include Message Blocks\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-quoted-table-identifiers\": {\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\": \"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\": \"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\": \"updatedatabasetable-quoted-table-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"Include Null Fields\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-record-writer\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Update Field Names\",\n-                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\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+                            \"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\": \"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-M4\"\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-                            \"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+                                \"name\": \"Reply Monitor Frequency\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-translate-field-names\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"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+                            \"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\": \"updatedatabasetable-translate-field-names\",\n+                                \"name\": \"Reply Monitor Window\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"updatedatabasetable-update-field-names\": {\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\": \"false\",\n-                                \"description\": \"This property indicates whether to update the output schema such that the field names are set to the exact column names from the specified table. This should be used if the incoming record field names may not match the table's column names in terms of upper- and lower-case. For example, this property should be set to true if the output FlowFile is destined for Oracle e.g., which expects the field names to match the column names exactly. NOTE: The value of the 'Translate Field Names' property is ignored when updating field names; instead they are updated to match the column name as returned by the database.\",\n-                                \"displayName\": \"Update Field Names\",\n+                                \"defaultValue\": \"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\": \"updatedatabasetable-update-field-names\",\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\": \"A FlowFile containing records routed to this relationship after the record has been successfully transmitted to the database.\",\n+                                \"description\": \"Slack messages that are successfully received will be routed to this relationship\",\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+                            \"conversation\",\n+                            \"conversation.history\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n+                            \"text\",\n+                            \"unstructured\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateDatabaseTable\",\n-                        \"typeDescription\": \"This processor uses a JDBC connection and incoming records to generate any database table changes needed to support the incoming records. It expects a 'flat' record layout, meaning none of the top-level record fields has nested fields that are intended to become columns themselves.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\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+                                \"description\": \"The number of slack messages that are included in the FlowFile\",\n+                                \"name\": \"slack.message.count\"\n                             },\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer, only if a Record Writer is specified and Update Field Names is 'true'.\",\n+                                \"description\": \"Set to application/json, as the output will always be in JSON format\",\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+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\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+                        \"defaultYieldDuration\": \"250 millis\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Record Reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\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\": \"Record Reader\",\n+                                \"name\": \"App Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Record Writer\",\n+                                \"name\": \"Bot Token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"Replacement Value Strategy\": {\n+                            \"Event Type to Receive\": {\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\": \"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 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\": \"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\": \"literal-value\",\n-                                \"description\": \"Specifies how to interpret the configured replacement values\",\n-                                \"displayName\": \"Replacement Value Strategy\",\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\": \"Replacement Value Strategy\",\n+                                \"name\": \"Event Type to Receive\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Resolve User Details\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                            \"org.apache.nifi.processors.slack.ConsumeSlack\"\n                         ],\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are created will be sent to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"avro\",\n-                            \"csv\",\n-                            \"freeform\",\n-                            \"generic\",\n-                            \"json\",\n-                            \"log\",\n-                            \"logs\",\n-                            \"record\",\n-                            \"schema\",\n+                            \"command\",\n+                            \"event\",\n+                            \"listen\",\n+                            \"message\",\n+                            \"real-time\",\n+                            \"receive\",\n+                            \"slack\",\n+                            \"social media\",\n+                            \"team\",\n                             \"text\",\n-                            \"update\"\n+                            \"unstructured\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n-                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n-                        \"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+                        \"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-M4\",\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+                                \"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-standard-nar\",\n+                        \"artifact\": \"nifi-slack-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"defaultYieldDuration\": \"3 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"multiProcessorUseCases\": [],\n+                        \"multiProcessorUseCases\": [\n+                            {\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                         \"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+                            \"Access Token\": {\n+                                \"description\": \"OAuth Access Token used for authenticating/authorizing the Slack request sent by NiFi. This may be either a User Token or a Bot Token. The token must be granted the chat:write scope. Additionally, in order to upload FlowFile contents as an attachment, it must be granted files:write.\",\n+                                \"displayName\": \"Access Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Access Token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"Channel\": {\n+                                \"description\": \"The name or identifier of the channel to send the message to. If using a channel name, it must be prefixed with the # character. For example, #general. This is valid only for public channels. Otherwise, the unique identifier of the channel to publish to must be provided.\",\n+                                \"displayName\": \"Channel\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-delimiter\",\n+                                \"name\": \"Channel\",\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+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Send FlowFile Content as Message\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the name of the Character Set used to encode the FlowFile contents.\",\n+                                \"displayName\": \"Character Set\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-eol\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-header\": {\n+                            \"Include FlowFile Content as Attachment\": {\n                                 \"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+                                \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"validate-csv-header\",\n+                                \"name\": \"Include FlowFile Content as Attachment\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-quote\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max FlowFile Size\",\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+                            \"Message Text\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Use 'Message Text' Property\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Publish Strategy\",\n+                                        \"propertyName\": \"Publish Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text of the message to send to Slack.\",\n+                                \"displayName\": \"Message Text\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validate-csv-schema\",\n+                                \"name\": \"Message Text\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-strategy\": {\n+                            \"Publish Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In case an error is found, the input CSV file will be split into two FlowFiles: one routed to the 'valid' relationship containing all the correct lines and one routed to the 'invalid' relationship containing all the incorrect lines. Take care if choosing this option while using Unique cell processors in schema definition:the first occurrence will be considered valid and the next ones as invalid.\",\n-                                        \"displayName\": \"Line by line validation\",\n-                                        \"value\": \"Line by line validation\"\n+                                        \"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\": \"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\": \"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\": \"FlowFile validation\",\n-                                \"description\": \"Strategy to apply when routing input files to output relationships.\",\n-                                \"displayName\": \"Validation strategy\",\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\": \"validate-csv-strategy\",\n+                                \"name\": \"Publish Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"validate-csv-violations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, the validation.error.message attribute would include the list of all the violations for the first invalid line. Note that setting this property to true would slightly decrease the performances as all columns would be validated. If false, a line is invalid as soon as a column is found violating the specified constraint and only this violation for the first invalid line will be included in the validation.error.message attribute.\",\n-                                \"displayName\": \"Include all violations\",\n+                            \"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\": \"validate-csv-violations\",\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                         },\n-                        \"sideEffectFree\": true,\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 that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n+                                \"description\": \"FlowFiles are routed to success after being successfully sent to Slack\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\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 'rate limited' if the Rate Limit has been exceeded\",\n+                                \"name\": \"rate limited\"\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+                            \"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.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-M4\",\n-                        \"writesAttributes\": [\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-                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n-                                \"name\": \"count.valid.lines\"\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-                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n-                                \"name\": \"count.invalid.lines\"\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-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"If line by line validation, total number of lines in the source data\",\n-                                \"name\": \"count.total.lines\"\n+                                \"description\": \"The ID of the Slack Channel from which the messages were retrieved\",\n+                                \"name\": \"slack.channel.id\"\n                             },\n                             {\n-                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n-                                \"name\": \"validation.error.message\"\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-M4\"\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\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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-                        \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"JSON Schema\": {\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-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"ssl-context-service\"\n                                     }\n                                 ],\n-                                \"description\": \"A URL or file path to the JSON schema or the actual JSON schema content\",\n-                                \"displayName\": \"JSON Schema\",\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\": \"JSON Schema\",\n+                                \"name\": \"HTTP Protocols\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\",\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+                            \"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\": \"JSON Schema Registry\",\n+                                \"name\": \"audience\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"authorization-server-url\": {\n+                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n+                                \"displayName\": \"Authorization Server URL\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"authorization-server-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.JsonSchemaRegistry\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"JSON Schema Version\": {\n+                            \"client-authentication-strategy\": {\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\": \"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\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n+                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n+                                        \"value\": \"BASIC_AUTHENTICATION\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\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\": \"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+                            \"client-secret\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCHEMA_CONTENT_PROPERTY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"Client ID\",\n+                                        \"propertyName\": \"client-id\"\n                                     }\n                                 ],\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Client secret\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"JSON Schema Version\",\n+                                \"name\": \"client-secret\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"Schema Access Strategy\": {\n+                            \"grant-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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"Schema Access Strategy\",\n+                                \"name\": \"grant-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Schema Name\": {\n-                                \"defaultValue\": \"${schema.name}\",\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-M4\"\n+                                }\n+                            },\n+                            \"refresh-token\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SCHEMA_NAME_PROPERTY\"\n+                                            \"refresh_token\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"Schema Access Strategy\"\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the name of the schema to lookup in the Schema Registry property\",\n-                                \"displayName\": \"Schema Name\",\n+                                \"description\": \"Refresh Token.\",\n+                                \"displayName\": \"Refresh Token\",\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\": \"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-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n-                                \"name\": \"valid\"\n                             },\n-                            {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                            \"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-                            {\n-                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\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\": \"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\": \"allow-extra-fields\",\n+                                \"name\": \"service-password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"coerce-types\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"service-user-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"password\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Grant Type\",\n+                                        \"propertyName\": \"grant-type\"\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\": \"Username on the service that is being accessed.\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"coerce-types\",\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-                            \"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+                            \"ssl-context-service\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"invalid-record-writer\",\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-M4\"\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\": \"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+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"access token\",\n+                            \"authorization\",\n+                            \"http\",\n+                            \"oauth2\",\n+                            \"provider\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.oauth2.StandardOauth2AccessTokenProvider\",\n+                        \"typeDescription\": \"Provides OAuth 2.0 access tokens that can be used as Bearer authorization header in HTTP requests. Can use either Resource Owner Password Credentials Grant or Client Credentials Grant. Client authentication can be done with either HTTP Basic authentication or in the request body.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hazelcast-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"record-reader\",\n+                                \"name\": \"hazelcast-cache-manager\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-hazelcast-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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+                            \"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\": \"record-writer\",\n+                                \"name\": \"hazelcast-entry-ttl\",\n                                 \"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-M4\"\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.DistributedMapCacheClient\",\n+                                \"version\": \"2.0.0-M4\"\n                             },\n-                            \"schema-access-strategy\": {\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-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\",\n+                            \"map\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cacheclient.HazelcastMapCacheClient\",\n+                        \"typeDescription\": \"An implementation of DistributedMapCacheClient that uses Hazelcast as the backing cache. This service relies on an other controller service, manages the actual Hazelcast calls, set in Hazelcast Cache Manager.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-clustering-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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"reader-schema\",\n-                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n-                                \"displayName\": \"Schema Access Strategy\",\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\": \"schema-access-strategy\",\n+                                \"name\": \"hazelcast-clustering-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+                            \"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\": \"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\": \"hazelcast-instances\",\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+                            \"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+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"cache\",\n+                            \"hazelcast\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.EmbeddedHazelcastCacheManager\",\n+                        \"typeDescription\": \"A service that runs embedded Hazelcast and provides cache instances backed by that. The server does not ask for authentication, it is recommended to run it within secured network.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-hazelcast-services-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"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-M4\"\n-                                }\n+                                \"name\": \"hazelcast-connection-timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"schema-text\": {\n-                                \"defaultValue\": \"${avro.schema}\",\n-                                \"description\": \"The text of an Avro-formatted Schema\",\n-                                \"displayName\": \"Schema Text\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-text\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hazelcast-retry-backoff-initial\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"strict-type-checking\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n-                                \"displayName\": \"Strict Type Checking\",\n+                            \"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\": \"strict-type-checking\",\n+                                \"name\": \"hazelcast-retry-backoff-maximum\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"validation-details-attribute-name\",\n-                                \"required\": 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-                            {\n-                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n-                                \"name\": \"invalid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"failure\"\n+                                \"artifact\": \"nifi-hazelcast-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.hazelcast.services.cachemanager.HazelcastCacheManager\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"record\",\n-                            \"schema\",\n-                            \"validate\"\n+                            \"cache\",\n+                            \"hazelcast\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.standard.ValidateRecord\",\n-                        \"typeDescription\": \"Validates the Records of an incoming FlowFile against a given schema. All records that adhere to the schema are routed to the \\\"valid\\\" relationship while records that do not adhere to the schema are routed to the \\\"invalid\\\" relationship. It is therefore possible for a single incoming FlowFile to be split into two individual FlowFiles if some records are valid according to the schema and others are not. Any FlowFile that is routed to the \\\"invalid\\\" relationship will emit a ROUTE Provenance Event with the Details field populated to explain why records were invalid. In addition, to gain further explanation of why records were invalid, DEBUG-level logging can be enabled for the \\\"org.apache.nifi.processors.standard.ValidateRecord\\\" logger.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the FlowFile routed to a relationship\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n-                    },\n+                        \"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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-file-resource-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-file-resource-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                                \"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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Schema File\",\n-                                \"required\": 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-                                        \"URL\"\n+                                        \"FILE\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"XML Source Attribute\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles that are successfully validated against the schema, if provided, or verified to be well-formed XML are routed to this relationship\",\n-                                \"name\": \"valid\"\n-                            },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles that are not valid according to the specified schema or contain invalid XML are routed to this relationship\",\n-                                \"name\": \"invalid\"\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": true,\n+                        \"restricted\": 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-                            \"schema\",\n-                            \"validation\",\n-                            \"xml\",\n-                            \"xsd\"\n+                            \"file\",\n+                            \"resource\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n-                                \"name\": \"validatexml.invalid.error\"\n-                            }\n-                        ]\n-                    },\n+                        \"type\": \"org.apache.nifi.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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-airtable-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-airtable-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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-                            \"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+                            \"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\": \"attribute-copy-mode\",\n+                                \"name\": \"api-key\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"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\": \"api-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.distributed.cache.client.AtomicDistributedMapCacheClient\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"expiration-duration\",\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-                            \"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+                            \"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\": \"releasable-flowfile-count\",\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-                            \"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+                            \"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\": \"release-signal-id\",\n-                                \"required\": true,\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-                            \"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-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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"signal-counter-name\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"target-signal-count\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-buffer-count\",\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-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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"wait-mode\",\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-                            \"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+                            \"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-penalty-duration\",\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-M4\"\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.Notify\"\n-                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"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+                                \"description\": \"For FlowFiles created as a result of a successful query.\",\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+                        \"supportsBatching\": false,\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+                            \"airtable\",\n+                            \"database\",\n+                            \"query\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\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+                        \"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-M4\",\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+                                \"description\": \"Sets the number of records in the FlowFile.\",\n+                                \"name\": \"record.count\"\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+                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n                             }\n                         ]\n                     }\n                 ],\n-                \"reportingTasks\": [\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\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_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\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\": \"Specifies whether or not to show the difference in values between the current status and the previous status\",\n-                                \"displayName\": \"Show Deltas\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Show Deltas\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"reporting-granularity\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n-                                        \"displayName\": \"Five Minutes\",\n-                                        \"value\": \"five-minutes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n-                                        \"displayName\": \"One Second\",\n-                                        \"value\": \"one-second\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"five-minutes\",\n-                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n-                                \"displayName\": \"Reporting Granularity\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"reporting-granularity\",\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"Directory Display Name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory Location\": {\n-                                \"description\": \"The directory path of the partition to be monitored.\",\n-                                \"displayName\": \"Directory Location\",\n+                            \"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\": \"Directory Location\",\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-M4\"\n+                                }\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+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Threshold\",\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-                        },\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Memory Pool\": {\n+                            },\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Eden Space\",\n-                                        \"value\": \"G1 Eden Space\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Old Gen\",\n-                                        \"value\": \"G1 Old Gen\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"G1 Survivor Space\",\n-                                        \"value\": \"G1 Survivor Space\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Memory Pool\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Reporting Interval\": {\n-                                \"description\": \"Indicates how often this reporting task should report bulletins while the memory utilization exceeds the configured threshold\",\n-                                \"displayName\": \"Reporting Interval\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Reporting Interval\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Usage Threshold\",\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-standard-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"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\": \"Hostname\",\n+                                \"name\": \"el-rest-format-aggregations\",\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+                            \"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\": \"Port\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\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\": \"Specifies whether or not JVM Metrics should be gathered and sent, in addition to NiFi-specific metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\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\": \"Send JVM Metrics\",\n+                                \"name\": \"el-rest-output-no-hits\",\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-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-kubernetes-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"mongo-uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"mongo-write-concern\": {\n+                            \"el-rest-pagination-type\": {\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+                                        \"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\": \"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+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\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+                                        \"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-split-up-aggregations\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write operations that use this write concern will wait for acknowledgement from two members\",\n-                                        \"displayName\": \"W2\",\n-                                        \"value\": \"W2\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\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+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ACKNOWLEDGED\",\n-                                \"description\": \"The write concern to use\",\n-                                \"displayName\": \"Write Concern\",\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\": \"mongo-write-concern\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"ssl-client-auth\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\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\": \"REQUIRED\",\n-                                \"description\": \"Client authentication policy when connecting to secure (TLS/SSL) cluster. Possible values are REQUIRED, WANT, NONE. This property is only used when an SSL Context has been defined and enabled.\",\n-                                \"displayName\": \"Client Auth\",\n+                                \"defaultValue\": \"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\": \"ssl-client-auth\",\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-                            \"ssl-context-service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"es-rest-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\": \"ssl-context-service\",\n+                                \"name\": \"es-rest-additional-filters\",\n                                 \"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-M4\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-mongodb-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"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\": \"mongo-collection-name\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-aggs\",\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+                            \"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\": \"mongo-db-name\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-query-fields\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\n-                                }\n-                            },\n-                            \"mongo-lookup-projection\": {\n-                                \"description\": \"Specifies a projection for limiting which fields will be returned.\",\n-                                \"displayName\": \"Projection\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-projection\",\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-                            \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mongo-lookup-value-field\",\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-                            \"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+                            \"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\": \"schema-access-strategy\",\n+                                \"name\": \"es-rest-range-field\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-branch\": {\n+                            \"es-rest-range-format\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-branch\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-format\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"schema-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"es-rest-range-initial-value\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-registry\": {\n+                            \"es-rest-range-time-zone\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Initial Value\",\n+                                        \"propertyName\": \"es-rest-range-initial-value\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\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\": \"schema-registry\",\n+                                \"name\": \"es-rest-range-time-zone\",\n                                 \"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-M4\"\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+                            \"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\": \"schema-text\",\n+                                \"name\": \"es-rest-size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-version\": {\n-                                \"dependencies\": [\n+                            \"es-rest-sort-order\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-name\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"asc\",\n+                                        \"value\": \"asc\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"desc\",\n+                                        \"value\": \"desc\"\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.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-py4j-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-websocket-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-websocket-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                                \"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-M4\"\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+                                \"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\": \"websocket-client-id\",\n+                                \"name\": \"es-rest-sort-order\",\n                                 \"required\": true,\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\": \"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+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"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-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\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.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.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-M4\",\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+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.local.address\"\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\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\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-websocket-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44554,112 +48736,200 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\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+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"server-url-path\",\n+                                \"name\": \"Max JSON Field String Length\",\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+                            \"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\": \"websocket-server-controller-service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-websocket-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\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+                                    {\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+                                \"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+                                    {\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\": \"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+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The WebSocket text message output\",\n-                                \"name\": \"text message\"\n+                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The WebSocket binary message output\",\n-                                \"name\": \"binary message\"\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\": \"The WebSocket session is established\",\n-                                \"name\": \"connected\"\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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-                            \"WebSocket\",\n-                            \"consume\",\n-                            \"listen\",\n-                            \"subscribe\"\n+                            \"delete\",\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\"\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.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-M4\",\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+                                \"description\": \"The amount of time that it took to complete the delete operation in ms.\",\n+                                \"name\": \"elasticsearch.delete.took\"\n                             },\n                             {\n-                                \"description\": \"TEXT or BINARY.\",\n-                                \"name\": \"websocket.message.type\"\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-websocket-processors-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44667,148 +48937,187 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of a URL query parameter to add\",\n+                                \"value\": \"The value of the URL query parameter\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"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+                            \"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-M4\"\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\": \"websocket-controller-service-id\",\n+                                \"name\": \"el-rest-fetch-index\",\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+                            \"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\": \"websocket-endpoint-id\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\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+                            \"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\": \"websocket-message-type\",\n+                                \"name\": \"get-es-attribute-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"websocket-session-id\": {\n-                                \"defaultValue\": \"${websocket.session.id}\",\n-                                \"description\": \"A NiFi Expression to retrieve the session id. If not specified, a message will be sent to all connected WebSocket peers for the WebSocket controller service endpoint.\",\n-                                \"displayName\": \"WebSocket Session Id\",\n+                            \"get-es-destination\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Output the retrieved document as the FlowFile content.\",\n+                                        \"displayName\": \"FlowFile Content\",\n+                                        \"value\": \"flowfile-content\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Output the retrieved document as a FlowFile attribute specified by the Attribute Name.\",\n+                                        \"displayName\": \"FlowFile Attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the retrieved document is written to the FlowFile content or a FlowFile attribute.\",\n+                                \"displayName\": \"Destination\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"get-es-destination\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"get-es-id\": {\n+                                \"description\": \"The _id of the document to retrieve.\",\n+                                \"displayName\": \"Document Id\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"websocket-session-id\",\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\": \"FlowFiles that are sent successfully to the destination are transferred to this relationship.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Fetched documents are routed to this relationship.\",\n+                                \"name\": \"document\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles that failed to send to the destination are transferred to this relationship.\",\n+                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n+                                \"name\": \"not_found\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n+                            },\n+                            {\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"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+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"index\",\n+                            \"json\",\n+                            \"put\",\n+                            \"record\"\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+                        \"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-M4\",\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+                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"WebSocket server address.\",\n-                                \"name\": \"websocket.local.address\"\n+                                \"description\": \"The Elasticsearch index containing the document\",\n+                                \"name\": \"elasticsearch.index\"\n                             },\n                             {\n-                                \"description\": \"WebSocket client address.\",\n-                                \"name\": \"websocket.remote.address\"\n+                                \"description\": \"The Elasticsearch document type\",\n+                                \"name\": \"elasticsearch.type\"\n                             },\n                             {\n-                                \"description\": \"Detail of the failure.\",\n-                                \"name\": \"websocket.failure.detail\"\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error fetching the document.\",\n+                                \"name\": \"elasticsearch.get.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -44816,508 +49125,440 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Commit Offsets\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether this Processor should commit the offsets to Kafka after receiving messages. Typically, this value should be 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 PublishKafka in order to provide Exactly Once semantics.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Group ID\": {\n-                                \"description\": \"Kafka Consumer Group Identifier corresponding to Kafka group.id property\",\n-                                \"displayName\": \"Group ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Group ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Header Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Character encoding applied when reading Kafka Record Header values and writing FlowFile attributes\",\n-                                \"displayName\": \"Header Encoding\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Encoding\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Name Pattern\": {\n-                                \"description\": \"Regular Expression Pattern applied to Kafka Record Header Names for selecting Header Values to be written as FlowFile attributes\",\n-                                \"displayName\": \"Header Name Pattern\",\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\": \"Header Name Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Kafka Connection Service\": {\n-                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n-                                \"displayName\": \"Kafka Connection 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\": \"Kafka Connection Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Key Attribute Encoding\": {\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\": \"The key is interpreted as a UTF-8 Encoded string.\",\n-                                        \"displayName\": \"UTF-8 Encoded\",\n-                                        \"value\": \"utf-8\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\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\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"Output Strategy\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"Encoding for value of configured FlowFile attribute containing Kafka Record Key.\",\n-                                \"displayName\": \"Key Attribute Encoding\",\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\": \"Key Attribute Encoding\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Format\": {\n+                            \"el-rest-format-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n+                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n+                                        \"description\": \"Document Source only (where present).\",\n+                                        \"displayName\": \"SOURCE_ONLY\",\n+                                        \"value\": \"SOURCE_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte-array\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"Output Strategy\"\n+                                        \"description\": \"Hit Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how to represent the Kafka Record Key in the output FlowFile\",\n-                                \"displayName\": \"Key Format\",\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\": \"Key Format\",\n+                                \"name\": \"el-rest-format-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Key Record Reader\": {\n-                                \"dependencies\": [\n+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"Key Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record Key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\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\": \"Key Record Reader\",\n+                                \"name\": \"el-rest-output-no-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.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Max Uncommitted Time\": {\n-                                \"defaultValue\": \"1 s\",\n+                            \"el-rest-query\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"full\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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\": \"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\": \"Max Uncommitted Time\",\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-                            \"Message Demarcator\": {\n+                            \"el-rest-query-clause\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"DEMARCATOR\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"Since KafkaConsumer receives messages in batches, this Processor has 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+                                \"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\": \"Message Demarcator\",\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-                            \"Output Strategy\": {\n+                            \"el-rest-query-definition-style\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"Provide the full Query.\",\n+                                        \"displayName\": \"FULL_QUERY\",\n+                                        \"value\": \"full\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"RECORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"description\": \"Build the Query from separate JSON objects.\",\n+                                        \"displayName\": \"BUILD_QUERY\",\n+                                        \"value\": \"build\"\n                                     }\n                                 ],\n-                                \"description\": \"The format used to output the Kafka Record into a FlowFile Record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"full\",\n+                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n+                                \"displayName\": \"Query Definition Style\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Processing Strategy\": {\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write one FlowFile for each Kafka Record consumed\",\n-                                        \"displayName\": \"FLOW_FILE\",\n-                                        \"value\": \"FLOW_FILE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write one FlowFile for each batch of Kafka Records consumed (optionally grouped by Kafka key)\",\n-                                        \"displayName\": \"DEMARCATOR\",\n-                                        \"value\": \"DEMARCATOR\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"Write one FlowFile containing multiple Kafka Records consumed and processed with Record Reader and Record Writer\",\n-                                        \"displayName\": \"RECORD\",\n-                                        \"value\": \"RECORD\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOW_FILE\",\n-                                \"description\": \"Strategy for processing Kafka Records and writing serialized output to FlowFiles\",\n-                                \"displayName\": \"Processing Strategy\",\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\": \"Processing Strategy\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n-                                \"dependencies\": [\n+                            \"el-rest-split-up-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"RECORD\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\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\": \"The Record Reader to use for incoming Kafka messages\",\n-                                \"displayName\": \"Record Reader\",\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\": \"Record Reader\",\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.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\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                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Processing Strategy\",\n-                                        \"propertyName\": \"Processing Strategy\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use in order to serialize the outgoing FlowFiles\",\n-                                \"displayName\": \"Record Writer\",\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\": \"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-M4\"\n-                                }\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-                            \"Separate By Key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n+                            \"es-rest-query-fields\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Message Demarcator\",\n-                                        \"propertyName\": \"Message Demarcator\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"When this property is enabled, 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+                                \"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\": \"Separate By Key\",\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-                            \"Topic Format\": {\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+                            \"es-rest-query-script-fields\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Topic is a regular expression according to the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topics provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Format\",\n+                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n+                                \"displayName\": \"Script Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Topic Format\",\n-                                \"required\": true,\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-                            \"Topics\": {\n-                                \"description\": \"The name or pattern of the Kafka Topics from which the Processor consumes Kafka Records. More than one can be supplied if comma separated.\",\n-                                \"displayName\": \"Topics\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Topics\",\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-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n+                            \"es-rest-size\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset found for the consumer group\",\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\": \"latest\",\n-                                \"description\": \"Automatic offset configuration applied when no previous consumer offset found corresponding to Kafka auto.offset.reset property\",\n-                                \"displayName\": \"Auto Offset Reset\",\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\": \"auto.offset.reset\",\n-                                \"required\": true,\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.kafka.processors.PublishKafka\"\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing one or more serialized Kafka Records\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n+                            },\n+                            {\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n+                            },\n+                            {\n+                                \"description\": \"All original flowfiles that don't cause an error to occur 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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Record\",\n-                            \"Topic\",\n-                            \"avro\",\n-                            \"csv\",\n-                            \"json\"\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.kafka.processors.ConsumeKafka\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka Consumer API. The complementary NiFi processor for sending messages is PublishKafka. The Processor supports consumption of Kafka messages, optionally interpreted as NiFi records. Please note that, at this time (in read record mode), the Processor assumes that all records that are retrieved from a given partition have the same schema. For this mode, 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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records received\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME Type that is provided by the configured Record Writer\",\n+                                \"description\": \"application/json\",\n                                 \"name\": \"mime.type\"\n                             },\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+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n                             },\n                             {\n-                                \"description\": \"The partition of the topic the message or message bundle is from\",\n-                                \"name\": \"kafka.partition\"\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n                             },\n                             {\n-                                \"description\": \"The topic the message or message bundle is from\",\n-                                \"name\": \"kafka.topic\"\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n                             },\n                             {\n-                                \"description\": \"Set to true if the consumed message is a tombstone message\",\n-                                \"name\": \"kafka.tombstone\"\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-kafka-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -45325,1995 +49566,2010 @@\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-                            \"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+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Failure Strategy\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"FlowFile Attribute Header Pattern\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the pattern will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"FlowFile Attribute Header Pattern\",\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\": \"FlowFile Attribute Header Pattern\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-query-attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Header Encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"FlowFile Attribute Header Pattern\",\n-                                        \"propertyName\": \"FlowFile Attribute Header Pattern\"\n-                                    }\n-                                ],\n-                                \"description\": \"For any attribute that is added as a Kafka Record Header, this property indicates the Character Encoding to use for serializing the headers.\",\n-                                \"displayName\": \"Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Header Encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Kafka Connection Service\": {\n-                                \"description\": \"Provides connections to Kafka Broker for publishing Kafka Records\",\n-                                \"displayName\": \"Kafka Connection 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\": \"Kafka Connection Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-kafka-service-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Kafka Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Key to use for the Message. If not specified, the FlowFile 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+                            \"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\": \"Kafka Key\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-fetch-index\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Kafka Key Attribute Encoding\": {\n+                            \"el-rest-format-aggregations\": {\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\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\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\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\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\": \"Kafka Key Attribute Encoding\",\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\": \"Kafka Key Attribute Encoding\",\n+                                \"name\": \"el-rest-format-aggregations\",\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 Key Field\": {\n-                                \"dependencies\": [\n+                            \"el-rest-format-hits\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\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-                                \"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+                                \"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\": \"Message Key Field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-rest-format-hits\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Publish Strategy\": {\n+                            \"el-rest-output-no-hits\": {\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\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"Publish Strategy\",\n+                                \"name\": \"el-rest-output-no-hits\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Record Metadata Strategy\": {\n+                            \"el-rest-pagination-type\": {\n                                 \"allowableValues\": [\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\": \"FROM_RECORD\"\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\": \"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\": \"FROM_PROPERTIES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"FROM_PROPERTIES\",\n-                                \"dependencies\": [\n+                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n+                                        \"displayName\": \"SEARCH_AFTER\",\n+                                        \"value\": \"pagination-search_after\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"Publish Strategy\"\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-                                \"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+                                \"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\": \"Record Metadata Strategy\",\n+                                \"name\": \"el-rest-pagination-type\",\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\": 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-M4\"\n-                                }\n-                            },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n-                                \"required\": 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-M4\"\n-                                }\n-                            },\n-                            \"Topic Name\": {\n-                                \"description\": \"Name of the Kafka Topic to which the Processor publishes Kafka Records\",\n-                                \"displayName\": \"Topic Name\",\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\": \"Topic Name\",\n-                                \"required\": true,\n+                                \"name\": \"el-rest-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Transactional ID Prefix\": {\n+                            \"el-rest-query-clause\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"true\"\n+                                            \"build\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Transactions Enabled\",\n-                                        \"propertyName\": \"Transactions Enabled\"\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the KafkaProducer config transactional.id will be a generated UUID and will be prefixed with the configured string.\",\n-                                \"displayName\": \"Transactional ID Prefix\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Transactional ID Prefix\",\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-                            \"Transactions Enabled\": {\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\": \"true\",\n-                                \"description\": \"Specifies whether to 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\": \"Transactions Enabled\",\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\": \"Transactions Enabled\",\n+                                \"name\": \"el-rest-query-definition-style\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"el-rest-split-up-aggregations\": {\n                                 \"allowableValues\": [\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-                                        \"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\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka Client acks property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\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\": \"acks\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n+                            \"el-rest-split-up-hits\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\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\": \"none\",\n-                                \"description\": \"Specifies the compression strategy for records sent to Kafka. Corresponds to Kafka Client compression.type property.\",\n-                                \"displayName\": \"Compression 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\": \"compression.type\",\n+                                \"name\": \"el-rest-split-up-hits\",\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 Client max.request.size property.\",\n-                                \"displayName\": \"Max Request 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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies the Kafka Partition destination for Records.\",\n-                                \"displayName\": \"Partition\",\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\": \"partition\",\n+                                \"name\": \"es-rest-query-aggs\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\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+                                        \"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                                     {\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+                                        \"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\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners.ExpressionLanguagePartitioner\"\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\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 Client partitioner.class property.\",\n-                                \"displayName\": \"Partitioner Class\",\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\": \"partitioner.class\",\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+                            \"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-                        \"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                         \"seeAlso\": [\n-                            \"org.apache.nifi.kafka.processors.ConsumeKafka\"\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\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\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\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"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-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n                             \"json\",\n-                            \"logs\"\n+                            \"page\",\n+                            \"query\",\n+                            \"read\",\n+                            \"scroll\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.kafka.processors.PublishKafka\",\n-                        \"typeDescription\": \"Sends the contents of a FlowFile as either a message or as individual records to Apache Kafka using the Kafka Producer API. The messages to send may be individual FlowFiles, may be delimited using a user-specified delimiter (such as a new-line), or may be record-oriented data that can be read by the configured Record Reader. The complementary NiFi processor for fetching messages is ConsumeKafka.\",\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-M4\",\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\": \"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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-key-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-key-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"The name of the Bulk request header\",\n+                                \"value\": \"The value of the Bulk request header\"\n+                            },\n+                            {\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-                            \"key\": {\n-                                \"description\": \"Private Key structured using PKCS8 and encoded as PEM\",\n-                                \"displayName\": \"Key\",\n+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-confluent-platform-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Properties that begin with 'request.header.' are populated into a map and passed as http headers in REST requests to the Confluent Schema Registry\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"request.header.*\",\n-                                \"value\": \"String literal, may not be empty\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"authentication-type\": {\n-                                \"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\": \"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+                                \"name\": \"Max JSON Field String Length\",\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+                            \"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\": \"cache-size\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"ssl-context\": {\n-                                \"description\": \"Specifies the SSL Context Service to use for interacting with the Confluent Schema Registry\",\n-                                \"displayName\": \"SSL Context Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context\",\n-                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"el-rest-fetch-index\": {\n+                                \"description\": \"The name of the index to use.\",\n+                                \"displayName\": \"Index\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"timeout\",\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-                            \"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+                            \"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\": \"url\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"username\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Type\",\n-                                        \"propertyName\": \"authentication-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Username for authentication to Confluent Schema Registry\",\n-                                \"displayName\": \"Username\",\n+                            \"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\": \"username\",\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-                        },\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-3-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-3-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                            \"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-M4\"\n-                                }\n                             },\n-                            \"ack.wait.time\": {\n-                                \"defaultValue\": \"5 s\",\n-                                \"description\": \"After sending a message to Kafka, this indicates the amount of time that the service will wait for a response from Kafka.\\nIf Kafka does not acknowledge the message within this time period, the service will throw an exception.\\n\",\n-                                \"displayName\": \"Acknowledgment Wait Time\",\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\": \"ack.wait.time\",\n-                                \"required\": true,\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-                            \"bootstrap.servers\": {\n-                                \"description\": \"Comma-separated list of Kafka Bootstrap Servers in the format host:port. Corresponds to Kafka bootstrap.servers property\",\n-                                \"displayName\": \"Bootstrap Servers\",\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\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-json-id-attr\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"default.api.timeout.ms\": {\n-                                \"defaultValue\": \"60 s\",\n-                                \"description\": \"Default timeout for Kafka client operations. Mapped to Kafka default.api.timeout.ms. The Kafka request.timeout.ms property is derived from half of the configured timeout\",\n-                                \"displayName\": \"Client Timeout\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"default.api.timeout.ms\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"put-es-json-script\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"isolation.level\": {\n+                            \"put-es-json-scripted-upsert\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Read records from Kafka only after the producer has committed a transaction.\",\n-                                        \"displayName\": \"Read Committed\",\n-                                        \"value\": \"read_committed\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Read records from Kafka as soon as the produced has sent the record, regardless of transaction status.\",\n-                                        \"displayName\": \"Read Uncommitted\",\n-                                        \"value\": \"read_uncommitted\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"read_committed\",\n-                                \"description\": \"Specifies how the service should handle transaction isolation levels when communicating with Kafka.\\nThe uncommited option 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.\\nThe committed option configures the service to not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the\\nconsumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\\nCorresponds to Kafka isolation.level property.\\n\",\n-                                \"displayName\": \"Transaction Isolation Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"isolation.level\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 s\",\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\\nentire 'send' call. Corresponds to Kafka max.block.ms property\\n\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n-                                \"required\": true,\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-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\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\": \"max.poll.records\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-not_found-is-error\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"put-es-output-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-512 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-256\",\n-                                        \"value\": \"SCRAM-SHA-256\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"defaultValue\": \"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\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-output-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"SASL Password\",\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\": \"sasl.password\",\n+                                \"name\": \"put-es-record-batch-size\",\n                                 \"required\": true,\n-                                \"sensitive\": 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\": \"SASL Username\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\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-                            \"security.protocol\": {\n+                            \"put-es-record-log-error-responses\": {\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\": \"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\": \"security.protocol\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-kafka-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kafka.service.api.KafkaConnectionService\",\n-                                \"version\": \"2.0.0-M4\"\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 are sent to Elasticsearch without request failures go to this relationship.\",\n+                                \"name\": \"original\"\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 fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"type\": \"org.apache.nifi.kafka.service.Kafka3ConnectionService\",\n-                        \"typeDescription\": \"Provides and manages connections to Kafka Brokers for producer or consumer operations.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-airtable-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-airtable-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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\": \"15 sec\",\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\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+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"el-rest-client-service\": {\n+                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\n+                                }\n                             },\n-                            \"base-id\": {\n-                                \"description\": \"The ID of the Airtable base to be queried.\",\n-                                \"displayName\": \"Base ID\",\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\": \"base-id\",\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-                            \"custom-filter\": {\n-                                \"description\": \"Filter records by Airtable's formulas.\",\n-                                \"displayName\": \"Custom Filter\",\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\": \"custom-filter\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"fields\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-not_found-is-error\",\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max-records-per-flowfile\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"put-es-output-error-responses\",\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+                            \"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+                                \"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\": \"query-page-size\",\n+                                \"name\": \"put-es-record-at-timestamp-date-format\",\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+                            \"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\": \"query-time-window-lag\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-at-timestamp-time-format\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"table-id\": {\n-                                \"description\": \"The name or the ID of the Airtable table to be queried.\",\n-                                \"displayName\": \"Table ID\",\n+                            \"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\": \"table-id\",\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-                            \"web-client-service-provider\": {\n-                                \"description\": \"Web Client Service Provider to use for Airtable REST API requests\",\n-                                \"displayName\": \"Web Client Service Provider\",\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+                                \"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\": \"web-client-service-provider\",\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.web.client.provider.api.WebClientServiceProvider\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"The last successful query's time is stored in order to enable incremental loading. The initial query returns all the records in the table and each subsequent query filters the records by their last modified time. In other words, if a record is updated after the last successful query only the updated records will be returned in the next query. State is stored across the cluster, so this Processor can run only on the Primary Node and if a new Primary Node is selected, the new node can pick up where the previous one left off without duplicating the data.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"For FlowFiles created as a result of a successful query.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"airtable\",\n-                            \"database\",\n-                            \"query\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.airtable.QueryAirtableTable\",\n-                        \"typeDescription\": \"Query records from an Airtable table. Records are incrementally retrieved based on the last modified time of the records. Records can also be further filtered by setting the 'Custom Filter' property which supports the formulas provided by the Airtable API. This processor is intended to be run on the Primary Node only.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the number of records in the FlowFile.\",\n-                                \"name\": \"record.count\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then this is the total number of FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n-                                \"name\": \"fragment.count\"\n                             },\n-                            {\n-                                \"description\": \"If 'Max Records Per FlowFile' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order FlowFiles were produced\",\n-                                \"name\": \"fragment.index\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-language-translation-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-language-translation-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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-                                \"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+                                \"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\": \"Character Set\",\n+                                \"name\": \"put-es-record-index-op\",\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+                            \"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\": \"Input Language\",\n+                                \"name\": \"put-es-record-index-op-path\",\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+                            \"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\": \"Target Language\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-index-record-path\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Translate Content\": {\n+                            \"put-es-record-log-error-responses\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether or not 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 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\": \"Translate Content\",\n-                                \"required\": true,\n+                                \"name\": \"put-es-record-log-error-responses\",\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+                            \"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\": \"Yandex API Key\",\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-M4\"\n+                                }\n+                            },\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+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n+                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n+                                    }\n+                                ],\n+                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n+                                \"displayName\": \"Retain @timestamp (Record Path)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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+                                    {\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\": \"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\": \"This relationship is used if the translation cannot be performed for some reason other than communications failure\",\n-                                \"name\": \"translation.failure\"\n+                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"This relationship is used when the translation is successful\",\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\": \"This relationship is used when the translation fails due to a problem such as a network failure, and for which the translation should be attempted again\",\n-                                \"name\": \"comms.failure\"\n+                                \"description\": \"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 fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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-                            \"language\",\n-                            \"translate\",\n-                            \"translation\",\n-                            \"yandex\"\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.yandex.YandexTranslate\",\n-                        \"typeDescription\": \"Translates content and attributes from one language to another\",\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-M4\",\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+                                \"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\": \"When the translation succeeds, if the content was translated, this attribute will be set indicating the new language of the content\",\n-                                \"name\": \"language\"\n+                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.error.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n+                                \"name\": \"elasticsearch.put.success.count\"\n+                            },\n+                            {\n+                                \"description\": \"The _bulk response if there was an error during processing the record within Elasticsearch.\",\n+                                \"name\": \"elasticsearch.bulk.error\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-opentelemetry-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-opentelemetry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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+                            \"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\": false,\n+                        \"primaryNodeOnly\": true,\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+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Address\",\n+                                \"name\": \"Max JSON Field String Length\",\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+                            \"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\": \"Batch Size\",\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-M4\"\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-                            \"Client Authentication\": {\n+                            \"el-rest-format-aggregations\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WANT\",\n-                                        \"value\": \"WANT\"\n+                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n+                                        \"displayName\": \"FULL\",\n+                                        \"value\": \"FULL\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Bucket Content only.\",\n+                                        \"displayName\": \"BUCKETS_ONLY\",\n+                                        \"value\": \"BUCKETS_ONLY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"Aggregation Metadata only.\",\n+                                        \"displayName\": \"METADATA_ONLY\",\n+                                        \"value\": \"METADATA_ONLY\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"WANT\",\n-                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n-                                \"displayName\": \"Client Authentication\",\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\": \"Client Authentication\",\n+                                \"name\": \"el-rest-format-aggregations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4317\",\n-                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n-                                \"displayName\": \"Port\",\n+                            \"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\": \"Port\",\n+                                \"name\": \"el-rest-format-hits\",\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+                            \"el-rest-output-no-hits\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n+                                \"displayName\": \"Output No Hits\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Queue Capacity\",\n+                                \"name\": \"el-rest-output-no-hits\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"el-rest-pagination-keep-alive\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Worker Threads\": {\n-                                \"defaultValue\": \"2\",\n-                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n-                                \"displayName\": \"Worker Threads\",\n+                            \"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\": \"Worker Threads\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\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.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-M4\",\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-M4\"\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\": \"19c5be0\"\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+                                \"name\": \"el-rest-pagination-type\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"connection-timeout\",\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-authorization\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query-clause\",\n                                 \"required\": false,\n-                                \"sensitive\": 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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"input-buffer-size\",\n+                                \"name\": \"el-rest-query-definition-style\",\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+                            \"el-rest-split-up-aggregations\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Flowfile per hit.\",\n+                                        \"displayName\": \"PER_HIT\",\n+                                        \"value\": \"splitUp-yes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Flowfile per response.\",\n+                                        \"displayName\": \"PER_RESPONSE\",\n+                                        \"value\": \"splitUp-no\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"splitUp-no\",\n+                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n+                                \"displayName\": \"Aggregation Results Split\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-binary-message-size\",\n+                                \"name\": \"el-rest-split-up-aggregations\",\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+                            \"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\": \"max-text-message-size\",\n+                                \"name\": \"el-rest-split-up-hits\",\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+                            \"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\": \"proxy-host\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\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+                            \"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\": \"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\": \"es-rest-query-aggs\",\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-                                \"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+                            \"es-rest-query-fields\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n+                                \"displayName\": \"Fields\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"user-name\": {\n-                                \"description\": \"The user name for Basic Authentication.\",\n-                                \"displayName\": \"User Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user-name\",\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-                            \"user-password\": {\n-                                \"description\": \"The user password for Basic Authentication.\",\n-                                \"displayName\": \"User Password\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"user-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"es-rest-query-sort\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"websocket-uri\": {\n-                                \"description\": \"The WebSocket URI this client connects to.\",\n-                                \"displayName\": \"WebSocket URI\",\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\": \"websocket-uri\",\n-                                \"required\": true,\n+                                \"name\": \"es-rest-size\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n+                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketClientService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"Aggregations are routed to this relationship.\",\n+                                \"name\": \"aggregations\"\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-M4\"\n+                                \"description\": \"Search hits are routed to this relationship.\",\n+                                \"name\": \"hits\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"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-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"client\"\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"json\",\n+                            \"page\",\n+                            \"query\",\n+                            \"scroll\",\n+                            \"search\"\n                         ],\n-                        \"type\": \"org.apache.nifi.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-M4\"\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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.name\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n+                                \"name\": \"aggregation.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n+                                \"name\": \"page.number\"\n+                            },\n+                            {\n+                                \"description\": \"The number of hits that are in the output flowfile\",\n+                                \"name\": \"hit.count\"\n+                            },\n+                            {\n+                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n+                                \"name\": \"elasticsearch.query.error\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-websocket-services-jetty-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                            \"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-                                \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"auth-roles\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"basic-auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"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+                            \"Max JSON Field String Length\": {\n+                                \"defaultValue\": \"20 MB\",\n+                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n+                                \"displayName\": \"Max JSON Field String Length\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"basic-auth\",\n+                                \"name\": \"Max JSON Field String Length\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Processor will not authenticate clients. Anyone can communicate with this Processor anonymously\",\n-                                        \"displayName\": \"No Authentication\",\n-                                        \"value\": \"no\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"want\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Processor will reject communications from any client unless the client provides a certificate that is trusted by the TrustStore specified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"need\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"no\",\n-                                \"description\": \"Specifies whether or not the Processor should authenticate client by its certificate. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"SSL Client Authentication\",\n+                            \"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\": \"client-authentication\",\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-                            \"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+                            \"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\": \"input-buffer-size\",\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-M4\"\n+                                }\n                             },\n-                            \"listen-port\": {\n-                                \"description\": \"The port number on which this WebSocketServer listens to.\",\n-                                \"displayName\": \"Listen Port\",\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\": \"listen-port\",\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-                            \"login-service\": {\n-                                \"allowableValues\": [\n+                            \"el-rest-query\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"full\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"hash\",\n-                                \"description\": \"Specify which Login Service to use for Basic Authentication.\",\n-                                \"displayName\": \"Login Service\",\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\": \"login-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-binary-message-size\": {\n-                                \"defaultValue\": \"64 kb\",\n-                                \"description\": \"The maximum size of a binary message during parsing/generating.\",\n-                                \"displayName\": \"Max Binary Message Size\",\n+                            \"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\": \"max-binary-message-size\",\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-                            \"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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-text-message-size\",\n+                                \"name\": \"el-rest-query-definition-style\",\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+                            \"el-rest-script\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"build\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Query Definition Style\",\n+                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                    }\n+                                ],\n+                                \"description\": \"A \\\"script\\\" to execute during the operation, in JSON syntax. Ex: {\\\"source\\\": \\\"ctx._source.count++\\\", \\\"lang\\\": \\\"painless\\\"}\",\n+                                \"displayName\": \"Script\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl-context-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-script\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"users-properties-file\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"el-rest-type\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketServerService\",\n-                                \"version\": \"2.0.0-M4\"\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-                                \"artifact\": \"nifi-websocket-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.websocket.WebSocketService\",\n-                                \"version\": \"2.0.0-M4\"\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\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n+                                \"name\": \"retry\"\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-                            \"Jetty\",\n-                            \"WebSocket\",\n-                            \"server\"\n+                            \"elastic\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch5\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\",\n+                            \"query\",\n+                            \"update\"\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-M4\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-enrich-nar\",\n@@ -48143,397 +52399,757 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-registry-nar\",\n+            \"artifact\": \"nifi-protobuf-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-protobuf-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                            \"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\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"false\",\n-                                        \"value\": \"false\"\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\": \"true\",\n-                                \"description\": \"Whether or not to validate the field names in the Avro schema based on Avro naming rules. If set to true, all field names must be valid Avro names, which must begin with [A-Za-z_], and subsequently contain only [A-Za-z0-9_]. If set to false, no validation will be performed on the field names.\",\n-                                \"displayName\": \"Validate Field Names\",\n+                                \"defaultValue\": \"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\": \"avro-reg-validated-field-names\",\n+                                \"name\": \"schema-access-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.schemaregistry.services.SchemaRegistry\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-registry-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"schema-branch\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Draft Version 7\",\n-                                        \"displayName\": \"Draft 7\",\n-                                        \"value\": \"DRAFT_7\"\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-                                        \"description\": \"Draft Version 2019-09\",\n-                                        \"displayName\": \"Draft 2019-09\",\n-                                        \"value\": \"DRAFT_2019_09\"\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\": \"Draft Version 2020-12\",\n-                                        \"displayName\": \"Draft 2020-12\",\n-                                        \"value\": \"DRAFT_2020_12\"\n+                                        \"dependentValues\": [\n+                                            \"schema-reference-reader\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"schema-access-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"DRAFT_2020_12\",\n-                                \"description\": \"The JSON schema specification\",\n-                                \"displayName\": \"JSON Schema Version\",\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\": \"JSON Schema Version\",\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-M4\"\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-M4\"\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.schemaregistry.services.JsonSchemaRegistry\",\n+                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"json\",\n-                            \"registry\",\n-                            \"schema\"\n+                            \"parser\",\n+                            \"protobuf\",\n+                            \"reader\",\n+                            \"record\"\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+                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n+                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-zendesk-nar\",\n+            \"artifact\": \"nifi-server-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cipher-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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                         \"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+                            \"cipher-algorithm-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Cipher Blocking Chaining Mode\",\n+                                        \"displayName\": \"CBC\",\n+                                        \"value\": \"CBC\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Counter Mode\",\n+                                        \"displayName\": \"CTR\",\n+                                        \"value\": \"CTR\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Galois/Counter Mode supporting Authenticated Encryption with Associated Data\",\n+                                        \"displayName\": \"GCM\",\n+                                        \"value\": \"GCM\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GCM\",\n+                                \"description\": \"Block cipher mode of operation for decryption using the Advanced Encryption Standard\",\n+                                \"displayName\": \"Cipher Algorithm Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"web-client-service-provider\",\n+                                \"name\": \"cipher-algorithm-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.web.client.provider.api.WebClientServiceProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"cipher-algorithm-padding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"NoPadding\",\n+                                        \"displayName\": \"NoPadding\",\n+                                        \"value\": \"NoPadding\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"PKCS5Padding\",\n+                                        \"displayName\": \"PKCS5Padding\",\n+                                        \"value\": \"PKCS5Padding\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication Type\",\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\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"cipher-algorithm-padding\",\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+                            \"key-specification\": {\n+                                \"description\": \"Specification providing the raw secret key or a password from which to derive a secret key\",\n+                                \"displayName\": \"Key Specification\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-authentication-value-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-specification\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"zendesk-export-method\": {\n+                            \"key-specification-format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"In cursor-based incremental exports, each page of results includes an \\\"after\\\" cursor pointer to use as the starting cursor for the next page of results.\",\n-                                        \"displayName\": \"Cursor Based\",\n-                                        \"value\": \"cursor\"\n+                                        \"description\": \"Raw secret key provided as a hexadecimal string\",\n+                                        \"displayName\": \"RAW\",\n+                                        \"value\": \"RAW\"\n                                     },\n                                     {\n-                                        \"description\": \"In time-based incremental exports, each page of results includes an end time to use as the start time for the next page of results.\",\n-                                        \"displayName\": \"Time Based\",\n-                                        \"value\": \"time\"\n+                                        \"description\": \"Password string for use with a Key Derivation Function to produce a secret key\",\n+                                        \"displayName\": \"PASSWORD\",\n+                                        \"value\": \"PASSWORD\"\n                                     }\n                                 ],\n-                                \"description\": \"Method for incremental export.\",\n-                                \"displayName\": \"Export Method\",\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\": \"zendesk-export-method\",\n+                                \"name\": \"key-specification-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\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+                            {\n+                                \"description\": \"Decryption succeeded\",\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+                        ],\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"Private Key Identities\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Private Key Source\",\n+                                        \"propertyName\": \"Private Key Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"One or more X25519 Private Key Identities, separated with newlines, encoded according to the age specification, starting with AGE-SECRET-KEY-1\",\n+                                \"displayName\": \"Private Key Identities\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-query-start-timestamp\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Identity Resources\",\n                                 \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-resource\": {\n+                            \"Private Key Source\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Tickets are the means through which end users (customers) communicate with agents in Zendesk Support.\",\n-                                        \"displayName\": \"Tickets\",\n-                                        \"value\": \"/api/v2/incremental/tickets\"\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n                                     },\n                                     {\n-                                        \"description\": \"Stream of changes that occurred on tickets. Each event is tied to an update on a ticket and contains all the fields that were updated in that change.\",\n-                                        \"displayName\": \"Ticket Events\",\n-                                        \"value\": \"/api/v2/incremental/ticket_events\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"PROPERTIES\",\n+                                \"description\": \"Source of information determines the loading strategy for X25519 Private Key Identities\",\n+                                \"displayName\": \"Private Key Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Private Key Source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.EncryptContentAge\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Decryption Failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption Completed\",\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+                            \"ChaCha20-Poly1305\",\n+                            \"X25519\",\n+                            \"age\",\n+                            \"age-encryption.org\",\n+                            \"encryption\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.cipher.DecryptContentAge\",\n+                        \"typeDescription\": \"Decrypt content using the age-encryption.org/v1 specification. Detects binary or ASCII armored content encoding using the initial file header bytes. The age standard uses ChaCha20-Poly1305 for authenticated encryption of the payload. The age-keygen command supports generating X25519 key pairs for encryption and decryption operations.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-cipher-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"encryption-scheme\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"PKCS12 with MD5 digest and Advanced Encryption Standard in Cipher Block Chaining mode using 128 bit keys.\",\n+                                        \"displayName\": \"PBE_WITH_MD5_AND_AES_CBC_128\",\n+                                        \"value\": \"PBEWITHMD5AND128BITAES-CBC-OPENSSL\"\n                                     },\n                                     {\n-                                        \"description\": \"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\": \"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\": \"Zendesk Support has three types of users: end users (customers), agents, and administrators.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"/api/v2/incremental/users\"\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\": \"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\": \"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\": \"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\": \"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\": \"When a recipient responds to an NPS survey, their rating, comment, and last survey date are captured.\",\n-                                        \"displayName\": \"NPS - Responses\",\n-                                        \"value\": \"/api/v2/nps/incremental/responses\"\n+                                        \"description\": \"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\": \"Every NPS survey is delivered to one or multiple recipients. For most businesses that use Zendesk Support, the recipients are customers. Agents and admins will never receive surveys.\",\n-                                        \"displayName\": \"NPS - Recipients\",\n-                                        \"value\": \"/api/v2/nps/incremental/recipients\"\n+                                        \"description\": \"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 particular Zendesk resource which is meant to be exported.\",\n-                                \"displayName\": \"Resource\",\n+                                \"description\": \"Password-Based Encryption Scheme including PBES1 described in RFC 8018, and others defined according to PKCS12 and Bouncy Castle implementations\",\n+                                \"displayName\": \"Encryption Scheme\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"zendesk-resource\",\n+                                \"name\": \"encryption-scheme\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-subdomain\": {\n-                                \"description\": \"Name of the Zendesk subdomain.\",\n-                                \"displayName\": \"Subdomain Name\",\n+                            \"key-derivation-strategy\": {\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+                                    },\n+                                    {\n+                                        \"description\": \"Jasypt Java Simplified Encryption using a digest algorithm with 1000 iterations and required salt of eight or sixteen bytes\",\n+                                        \"displayName\": \"JASYPT_STANDARD\",\n+                                        \"value\": \"JASYPT_STANDARD\"\n+                                    }\n+                                ],\n+                                \"description\": \"Strategy for reading salt from encoded contents and deriving the decryption key according to the number of function iterations\",\n+                                \"displayName\": \"Key Derivation Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subdomain\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-derivation-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"zendesk-user\": {\n-                                \"description\": \"Login user to Zendesk subdomain.\",\n-                                \"displayName\": \"User Name\",\n+                            \"password\": {\n+                                \"description\": \"Password required for Password-Based Encryption Schemes\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"password\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"Decryption failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Decryption succeeded\",\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-                            \"zendesk\"\n+                            \"Jasypt\",\n+                            \"OpenSSL\",\n+                            \"PBES1\",\n+                            \"PKCS5\",\n+                            \"cryptography\",\n+                            \"decipher\",\n+                            \"decrypt\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records fetched by the processor.\",\n-                                \"name\": \"record.count\"\n+                                \"description\": \"Password-Based Encryption Scheme\",\n+                                \"name\": \"pbe.scheme\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Block Cipher\",\n+                                \"name\": \"pbe.symmetric.cipher\"\n+                            },\n+                            {\n+                                \"description\": \"Password-Based Encryption Digest Algorithm\",\n+                                \"name\": \"pbe.digest.algorithm\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-zendesk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -48541,235 +53157,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\": \"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-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"zendesk-authentication-type-name\": {\n+                            \"File Encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Password of Zendesk login user.\",\n-                                        \"displayName\": \"Password\",\n-                                        \"value\": \"password\"\n+                                        \"description\": \"Binary encoding\",\n+                                        \"displayName\": \"BINARY\",\n+                                        \"value\": \"BINARY\"\n                                     },\n                                     {\n-                                        \"description\": \"Authentication token generated in Zendesk Admin menu for API access.\",\n-                                        \"displayName\": \"Token\",\n-                                        \"value\": \"token\"\n+                                        \"description\": \"ASCII Armor encoding\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"description\": \"Type of authentication to Zendesk API.\",\n-                                \"displayName\": \"Authentication 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\": \"zendesk-authentication-type-name\",\n+                                \"name\": \"File Encoding\",\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+                            \"Public Key Recipient Resources\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"dependentValues\": [\n+                                            \"RESOURCES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the comment body in the incoming record.\",\n-                                \"displayName\": \"Comment Body\",\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\": \"zendesk-comment-body\",\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-                            \"zendesk-priority\": {\n+                            \"Public Key Recipients\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"dependentValues\": [\n+                                            \"PROPERTIES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Public Key Source\",\n+                                        \"propertyName\": \"Public Key Source\"\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\": \"zendesk-priority\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-record-reader\": {\n-                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n-                                \"displayName\": \"Record Reader\",\n+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\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+                                \"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-                            \"zendesk-subject\": {\n-                                \"dependencies\": [\n+                            \"Public Key Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n-                                    }\n-                                ],\n-                                \"description\": \"The content or the path to the subject in the incoming record.\",\n-                                \"displayName\": \"Subject\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-subject\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"zendesk-type\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"Load one or more keys from configured properties\",\n+                                        \"displayName\": \"PROPERTIES\",\n+                                        \"value\": \"PROPERTIES\"\n+                                    },\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"zendesk-record-reader\"\n+                                        \"description\": \"Load one or more keys from files or URLs\",\n+                                        \"displayName\": \"RESOURCES\",\n+                                        \"value\": \"RESOURCES\"\n                                     }\n                                 ],\n-                                \"description\": \"The content or the path to the type in the incoming record.\",\n-                                \"displayName\": \"Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"zendesk-user\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Public Key Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.cipher.DecryptContentAge\"\n+                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"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\": \"Encryption Failed\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"For FlowFiles created as a result of a successful HTTP request.\",\n+                                \"description\": \"Encryption Completed\",\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-                            \"zendesk, ticket\"\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.zendesk.PutZendeskTicket\",\n-                        \"typeDescription\": \"Create Zendesk tickets using the Zendesk API.\",\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-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-workday-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-workday-processors-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-cipher-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -48778,157 +53316,261 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"Web Client Service Provider\": {\n-                                \"description\": \"Web client which is used to communicate with the Workday API.\",\n-                                \"displayName\": \"Web Client Service Provider\",\n+                            \"mac-algorithm\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA256\",\n+                                        \"value\": \"HmacSHA256\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HmacSHA512\",\n+                                        \"value\": \"HmacSHA512\"\n+                                    }\n+                                ],\n+                                \"description\": \"Hashed Message Authentication Code Function\",\n+                                \"displayName\": \"Message Authentication Code Algorithm\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n-                            },\n-                            \"Workday Password\": {\n-                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n-                                \"displayName\": \"Workday Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Password\",\n+                                \"name\": \"mac-algorithm\",\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+                            \"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\": \"Workday Report URL\",\n+                                \"name\": \"message-authentication-code\",\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+                            \"message-authentication-code-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HEXADECIMAL\",\n+                                \"description\": \"Encoding of the Message Authentication Code\",\n+                                \"displayName\": \"Message Authentication Code Encoding\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Workday Username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"message-authentication-code-encoding\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"secret-key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"dependencies\": [\n+                            \"secret-key-encoding\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Record Reader\",\n-                                        \"propertyName\": \"record-reader\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF8\",\n+                                        \"value\": \"UTF8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HEXADECIMAL\",\n+                                        \"value\": \"HEXADECIMAL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BASE64\",\n+                                        \"value\": \"BASE64\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\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\": \"record-writer\",\n+                                \"name\": \"secret-key-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\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\": \"Signature Verification Succeeded\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"description\": \"Signature Verification Failed\",\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                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Workday\",\n-                            \"report\"\n+                            \"Authentication\",\n+                            \"HMAC\",\n+                            \"MAC\",\n+                            \"Signing\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.workday.GetWorkdayReport\",\n-                        \"typeDescription\": \"A processor which can interact with a configurable Workday Report. The processor can forward the content without modification, or you can transform it by providing the specific Record Reader and Record Writer services based on your needs. You can also remove fields by defining schema in the Record Writer. Supported Workday report formats are: csv, simplexml, json\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The Java exception class raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.class\"\n+                                \"description\": \"Calculated Message Authentication Code encoded by the selected encoding\",\n+                                \"name\": \"mac.calculated\"\n                             },\n                             {\n-                                \"description\": \"The Java exception message raised when the processor fails\",\n-                                \"name\": \"getworkdayreport.java.exception.message\"\n+                                \"description\": \"The Encoding of the Hashed Message Authentication Code\",\n+                                \"name\": \"mac.encoding\"\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\": \"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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-apicurio-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-apicurio-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.SchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\n                             }\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-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-amqp-nar\",\n@@ -49613,35 +54255,23 @@\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-single-user-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jslt-nar\",\n+            \"artifact\": \"nifi-mqtt-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jslt-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -49650,588 +54280,470 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"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\": \"jslt-transform-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Timeout (seconds)\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-pretty_print\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                            \"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\": \"jslt-transform-pretty_print\",\n-                                \"required\": true,\n+                                \"name\": \"Group ID\",\n+                                \"required\": false,\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+                            \"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\": \"jslt-transform-result-filter\",\n-                                \"required\": true,\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n+                                \"required\": false,\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+                            \"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\": \"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+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Last Will Message\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"jslt-transform-transformation-strategy\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n-                                        \"displayName\": \"Entire FlowFile\",\n-                                        \"value\": \"ENTIRE_FLOWFILE\"\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\": \"Apply transformation each JSON Object in an array\",\n-                                        \"displayName\": \"Each JSON Object\",\n-                                        \"value\": \"EACH_OBJECT\"\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\": \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jslt-transform-transformation-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\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\": 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-                            \"jslt\",\n-                            \"json\",\n-                            \"transform\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-snmp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\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\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Last Will Retain\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\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\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n+                            \"Last Will Topic\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\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+                                \"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\": \"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+                                \"name\": \"Last Will Topic\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"MQTT Specification Version\": {\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+                                        \"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\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\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\": \"snmp-private-protocol\",\n+                                \"name\": \"MQTT Specification Version\",\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+                            \"Max Queue Size\": {\n+                                \"description\": \"The MQTT messages are always being sent to subscribers on a topic regardless of how frequently the processor is scheduled to run. If the 'Run Schedule' is significantly behind the rate at which the messages are arriving to this processor, then a back up can occur in the internal queue of this processor. This property specifies the maximum number of messages this processor will hold in memory at one time in the internal queue. This data would be lost in case of a NiFi restart.\",\n+                                \"displayName\": \"Max Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"name\": \"Max Queue Size\",\n                                 \"required\": true,\n-                                \"sensitive\": true\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+                            \"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\": \"snmp-retries\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"snmp-security-level\": {\n+                            \"Quality of Service(QoS)\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\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\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\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\": \"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\": \"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-                                \"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\": \"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\": \"snmp-security-level\",\n+                                \"name\": \"Quality of Service(QoS)\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-name\": {\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-M4\"\n+                                }\n+                            },\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv3\"\n+                                            \"false\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"5\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification Version\"\n                                     }\n                                 ],\n-                                \"description\": \"User name used for SNMP v3 Authentication.\",\n-                                \"displayName\": \"SNMP Security Name\",\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\": \"snmp-security-name\",\n-                                \"required\": true,\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-strategy\": {\n+                            \"Session state\": {\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+                                        \"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\": \"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+                                        \"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\": \"GET\",\n-                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n-                                \"displayName\": \"SNMP Strategy\",\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\": \"snmp-strategy\",\n+                                \"name\": \"Session state\",\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+                            \"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\": \"snmp-textual-oid\",\n-                                \"required\": false,\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-                            \"snmp-timeout\": {\n-                                \"defaultValue\": \"5000\",\n-                                \"description\": \"Set the timeout in ms when requesting the SNMP Agent.\",\n-                                \"displayName\": \"Timeout (ms)\",\n+                            \"Username\": {\n+                                \"description\": \"Username to use when connecting to the broker\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-timeout\",\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-                            \"snmp-version\": {\n+                            \"add-attributes-as-fields\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\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\": \"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\": \"snmp-version\",\n+                                \"name\": \"add-attributes-as-fields\",\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+                                \"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-M4\"\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-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.PublishMQTT\"\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+                                \"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\": \"All FlowFiles that cannot received from the SNMP agent are routed to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The MQTT message output\",\n+                                \"name\": \"Message\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": 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-                            \"get\",\n-                            \"oid\",\n-                            \"snmp\",\n-                            \"walk\"\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.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.mqtt.ConsumeMQTT\",\n+                        \"typeDescription\": \"Subscribes to a topic and receives messages from an MQTT broker\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"The number of records received\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"MQTT broker that was the message source\",\n+                                \"name\": \"mqtt.broker\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"MQTT topic on which message was received\",\n+                                \"name\": \"mqtt.topic\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"The quality of service for this message.\",\n+                                \"name\": \"mqtt.qos\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\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\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n-                                \"name\": \"snmp$textualOid\"\n+                                \"description\": \"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-snmp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mqtt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -50240,769 +54752,398 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"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\": \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-manager-port\",\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-                            \"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+                            \"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\": \"snmp-security-level\",\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-                            \"snmp-usm-security-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-security-names\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"noAuthNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"SNMP Users Security Names\",\n+                            \"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\": \"snmp-usm-security-names\",\n+                                \"name\": \"Connection Timeout (seconds)\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-file-path\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-file-path\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\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+                            \"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\": \"snmp-usm-users-file-path\",\n+                                \"name\": \"Keep Alive Interval (seconds)\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-usm-users-json-content\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"usm-json-content\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"USM Users Source\",\n-                                        \"propertyName\": \"snmp-usm-users-source\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The JSON containing the user credentials for SNMPv3. Check Usage for more details.\",\n-                                \"displayName\": \"USM Users JSON content\",\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\": \"snmp-usm-users-json-content\",\n+                                \"name\": \"Last Will Message\",\n                                 \"required\": false,\n-                                \"sensitive\": true\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-usm-users-source\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-version\": {\n+                            \"Last Will QoS Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\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\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\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\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\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\": \"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-                        \"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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP authentication protocol.\",\n-                                \"displayName\": \"SNMP Authentication Passphrase\",\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\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"Last Will QoS Level\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-authentication-protocol\": {\n+                            \"Last Will Retain\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\",\n-                                            \"authNoPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\n                                     }\n                                 ],\n-                                \"description\": \"Hash based authentication protocol for secure authentication.\",\n-                                \"displayName\": \"SNMP Authentication Protocol\",\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\": \"snmp-authentication-protocol\",\n+                                \"name\": \"Last Will Retain\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-community\": {\n-                                \"defaultValue\": \"public\",\n+                            \"Last Will Topic\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"Last Will Message\",\n+                                        \"propertyName\": \"Last Will Message\"\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+                                \"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\": \"snmp-community\",\n+                                \"name\": \"Last Will Topic\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol\": {\n+                            \"MQTT Specification Version\": {\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+                                        \"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\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"v5.0\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.1\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"authPriv\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"v3.1.0\",\n+                                        \"value\": \"3\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\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\": \"snmp-private-protocol\",\n+                                \"name\": \"MQTT Specification Version\",\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+                            \"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\": \"snmp-retries\",\n+                                \"name\": \"Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"snmp-security-level\",\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-                            \"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+                            \"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\": \"snmp-security-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Retain Message\",\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+                            \"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\": \"snmp-timeout\",\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-M4\"\n+                                }\n                             },\n-                            \"snmp-trap-agent-address\": {\n+                            \"Session Expiry Interval\": {\n+                                \"defaultValue\": \"24 hrs\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv1\"\n+                                            \"false\"\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+                                        \"propertyDisplayName\": \"Session state\",\n+                                        \"propertyName\": \"Session state\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SNMPv1\"\n+                                            \"5\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"propertyDisplayName\": \"MQTT Specification Version\",\n+                                        \"propertyName\": \"MQTT Specification 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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-enterprise-oid\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Session Expiry Interval\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-trap-generic-type\": {\n+                            \"Session state\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n-                                        \"displayName\": \"Cold Start\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A warmStart trap signifies that the sending protocol entity is reinitializing itself such that neither the agent configuration nor the protocol entity implementation is altered.\",\n-                                        \"displayName\": \"Warm Start\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkDown trap signifies that the sending protocol entity recognizes a failure in one of the communication links represented in the agent's configuration.\",\n-                                        \"displayName\": \"Link Down\",\n-                                        \"value\": \"2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A linkUp trap signifies that the sending protocol entity recognizes that one of the communication links represented in the agent's configuration has come up.\",\n-                                        \"displayName\": \"Link Up\",\n-                                        \"value\": \"3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An authenticationFailure trap signifies that the sending protocol entity is the addressee of a protocol message that is not properly authenticated. While implementations of the SNMP must be capable of generating this trap, they must also be capable of suppressing the emission of such traps via an implementation- specific mechanism.\",\n-                                        \"displayName\": \"Authentication Failure\",\n-                                        \"value\": \"4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An egpNeighborLoss trap signifies that an EGP neighbor for whom the sending protocol entity was an EGP peer has been marked down and the peer relationship no longer obtains\",\n-                                        \"displayName\": \"EGP Neighborloss\",\n-                                        \"value\": \"5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An enterpriseSpecific trap signifies that a particular enterprise-specific trap has occurred which can be defined in the Specific Trap Type field.\",\n-                                        \"displayName\": \"Enterprise Specific\",\n-                                        \"value\": \"6\"\n+                                        \"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\": \"Provide the Generic Trap Type with the \\\"generic-trap-type\\\" flowfile attribute.\",\n-                                        \"displayName\": \"With \\\"generic-trap-type\\\" FlowFile Attribute\",\n-                                        \"value\": \"generic-trap-type\"\n-                                    }\n-                                ],\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n+                                        \"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\": \"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\": \"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\": \"snmp-trap-generic-type\",\n+                                \"name\": \"Session state\",\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+                            \"Topic\": {\n+                                \"description\": \"The topic to publish the message to.\",\n+                                \"displayName\": \"Topic\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-manager-host\",\n+                                \"name\": \"Topic\",\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+                            \"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-                                \"name\": \"snmp-trap-manager-port\",\n-                                \"required\": true,\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-                            \"snmp-trap-oid-value\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv3\",\n-                                            \"SNMPv2c\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    }\n-                                ],\n-                                \"description\": \"The value of the trap OID.\",\n-                                \"displayName\": \"Trap OID Value\",\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-oid-value\",\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-                            \"snmp-trap-specific-type\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SNMPv1\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\n-                                    },\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"6\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Generic Trap Type\",\n-                                        \"propertyName\": \"snmp-trap-generic-type\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-trap-specific-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"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\": \"snmp-version\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.mqtt.ConsumeMQTT\"\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 sent successfully to the destination are transferred 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 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-                            \"send\",\n-                            \"snmp\",\n-                            \"trap\"\n+                            \"IOT\",\n+                            \"MQTT\",\n+                            \"publish\"\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.mqtt.PublishMQTT\",\n+                        \"typeDescription\": \"Publishes a message to an MQTT topic\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-box-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51015,383 +55156,386 @@\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-                            \"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+                            \"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\": \"snmp-authentication-passphrase\",\n+                                \"name\": \"box-client-service\",\n                                 \"required\": true,\n-                                \"sensitive\": 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-M4\"\n+                                }\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+                            \"box-file-id\": {\n+                                \"defaultValue\": \"${box.id}\",\n+                                \"description\": \"The ID of the File to fetch\",\n+                                \"displayName\": \"File ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"snmp-authentication-protocol\",\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-                            \"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+                            {\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+                            \"box\",\n+                            \"fetch\",\n+                            \"storage\"\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-M4\",\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-box-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"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+                            \"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\": \"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+                                \"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-M4\"\n+                                }\n                             },\n-                            \"snmp-port\": {\n-                                \"defaultValue\": \"161\",\n-                                \"description\": \"Port of the SNMP Agent.\",\n-                                \"displayName\": \"SNMP Agent Port\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"snmp-port\",\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-                            \"snmp-private-protocol\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Symmetric-key algorithm for the encryption of digital data. DES has been considered insecurebecause of the feasilibity of brute-force attacks. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"DES\",\n-                                        \"value\": \"DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Symmetric-key block cipher, which applies the DES cipher algorithm three times to each data block. 3DES has been considered insecure has been deprecated by NIST in 2017. We recommend using the AES encryption protocol.\",\n-                                        \"displayName\": \"3DES\",\n-                                        \"value\": \"3DES\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES128\",\n-                                        \"value\": \"AES128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"AES is a symmetric algorithm which uses the same 128, 192, or 256 bit key for both encryption and decryption (the security of an AES system increases exponentially with key length).\",\n-                                        \"displayName\": \"AES192\",\n-                                        \"value\": \"AES192\"\n+                                        \"description\": \"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\": \"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+                                        \"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-                                            \"authPriv\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Privacy allows for encryption of SNMP v3 messages to ensure confidentiality of data.\",\n-                                \"displayName\": \"SNMP Privacy Protocol\",\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\": \"snmp-private-protocol\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-private-protocol-passphrase\": {\n+                            \"et-state-cache\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"authPriv\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SNMP Security Level\",\n-                                        \"propertyName\": \"snmp-security-level\"\n+                                        \"propertyDisplayName\": \"Listing Strategy\",\n+                                        \"propertyName\": \"listing-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Passphrase used for SNMP privacy protocol.\",\n-                                \"displayName\": \"SNMP Privacy Passphrase\",\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\": \"snmp-private-protocol-passphrase\",\n-                                \"required\": true,\n-                                \"sensitive\": 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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"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\": \"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\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"snmp-security-level\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Communication without authentication and privacy.\",\n-                                        \"displayName\": \"noAuthNoPriv\",\n-                                        \"value\": \"noAuthNoPriv\"\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\": \"Communication with authentication and without privacy.\",\n-                                        \"displayName\": \"authNoPriv\",\n-                                        \"value\": \"authNoPriv\"\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\": \"Communication with authentication and privacy.\",\n-                                        \"displayName\": \"authPriv\",\n-                                        \"value\": \"authPriv\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"noAuthNoPriv\",\n-                                \"dependencies\": [\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-                                        \"dependentValues\": [\n-                                            \"SNMPv3\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SNMP Version\",\n-                                        \"propertyName\": \"snmp-version\"\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\": \"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\": \"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\": \"snmp-security-level\",\n+                                \"name\": \"listing-strategy\",\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+                            \"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\": \"snmp-security-name\",\n+                                \"name\": \"min-age\",\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+                            \"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\": \"snmp-timeout\",\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-M4\"\n+                                }\n                             },\n-                            \"snmp-version\": {\n+                            \"recursive-search\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"SNMP version 1\",\n-                                        \"displayName\": \"v1\",\n-                                        \"value\": \"SNMPv1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"SNMP version 2c\",\n-                                        \"displayName\": \"v2c\",\n-                                        \"value\": \"SNMPv2c\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"SNMP version 3 with improved security\",\n-                                        \"displayName\": \"v3\",\n-                                        \"value\": \"SNMPv3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SNMPv1\",\n-                                \"description\": \"Three significant versions of SNMP have been developed and deployed. SNMPv1 is the original version of the protocol. More recent versions, SNMPv2c and SNMPv3, feature improvements in performance, flexibility and security.\",\n-                                \"displayName\": \"SNMP Version\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"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\": \"snmp-version\",\n+                                \"name\": \"recursive-search\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.box.FetchBoxFile\",\n+                            \"org.apache.nifi.processors.box.PutBoxFile\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"oid\",\n-                            \"set\",\n-                            \"snmp\"\n+                            \"box\",\n+                            \"storage\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.snmp.processors.SetSNMP\",\n-                        \"typeDescription\": \"Based on incoming FlowFile attributes, the processor will execute SNMP Set requests. When finding attributes with the name snmp$<OID>, the processor will attempt to set the value of the attribute to the corresponding OID given in the attribute name.\",\n+                        \"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-M4\",\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+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n                             {\n-                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n-                                \"name\": \"snmp$nonRepeaters\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The request ID associated with the PDU.\",\n-                                \"name\": \"snmp$requestID\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n-                                \"name\": \"snmp$type\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\n                             },\n                             {\n-                                \"description\": \"The name of the PDU type.\",\n-                                \"name\": \"snmp$typeString\"\n+                                \"description\": \"The last modified time of the file\",\n+                                \"name\": \"box.timestamp\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-stateful-analysis-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-stateful-analysis-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-box-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51404,127 +55548,218 @@\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+                            \"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\": \"Sub-window length\",\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-M4\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"chunked-upload-threshold\",\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+                            \"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\": \"Time window\",\n+                                \"name\": \"conflict-resolution-strategy\",\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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"create-folder\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Value to track\",\n+                                \"name\": \"file-name\",\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\": \"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\": \"Files that have been successfully written to Box are transferred to this relationship.\",\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\": \"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-                            \"Attribute Expression Language\",\n-                            \"data science\",\n-                            \"rolling\",\n-                            \"state\",\n-                            \"window\"\n+                            \"box\",\n+                            \"put\",\n+                            \"storage\"\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.box.PutBoxFile\",\n+                        \"typeDescription\": \"Puts content to a Box folder.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The rolling window value (sum of all the values stored).\",\n-                                \"name\": \"rolling_window_value\"\n+                                \"description\": \"The id of the file\",\n+                                \"name\": \"box.id\"\n                             },\n                             {\n-                                \"description\": \"The count of the number of FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_count\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The mean of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_mean\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The variance of the FlowFiles seen in the rolling window.\",\n-                                \"name\": \"rolling_window_variance\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"box.size\"\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 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-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-salesforce-nar\",\n+            \"artifact\": \"nifi-mongodb-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -51537,507 +55772,410 @@\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+                            \"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\": \"oauth2-access-token-provider\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection 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.oauth2.OAuth2AccessTokenProvider\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\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+                            \"Mongo 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\": \"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-                            \"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+                            \"delete-mongo-delete-mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Delete only the first document that matches the query.\",\n+                                        \"displayName\": \"Delete One\",\n+                                        \"value\": \"one\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete every document that matches the query.\",\n+                                        \"displayName\": \"Delete Many\",\n+                                        \"value\": \"many\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read the 'mongodb.delete.mode attribute and use that mode. Acceptable values are 'many' and 'one.'\",\n+                                        \"displayName\": \"Use 'mongodb.delete.mode' attribute\",\n+                                        \"value\": \"attr\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"description\": \"Choose between deleting one document by query or many documents by query.\",\n+                                \"displayName\": \"Delete Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"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-M4\"\n-                                }\n+                                \"name\": \"delete-mongo-delete-mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"delete-mongo-fail-on-no-delete\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Fail when no documents are deleted.\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Do not fail when nothing is deleted.\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether to send the flowfile to the success or failure relationship if nothing is successfully deleted.\",\n+                                \"displayName\": \"Fail When Nothing Is Deleted\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-api-version\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete-mongo-fail-on-no-delete\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n-                                \"sensitive\": 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-M4\"\n+                                }\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"The Salesforce object type to upload records to. E.g. Account, Contact, Campaign.\",\n-                                \"name\": \"objectType\"\n+                                \"description\": \"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-                        \"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+                                \"description\": \"All FlowFiles that are written to MongoDB are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"For FlowFiles created as a result of an execution error.\",\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-                            \"put\",\n-                            \"salesforce\",\n-                            \"sobject\"\n+                            \"delete\",\n+                            \"mongo\",\n+                            \"mongodb\"\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+                        \"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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The error message returned by Salesforce.\",\n-                                \"name\": \"error.message\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-salesforce-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"age-delay\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    },\n-                                    {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-delay\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"age-field\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of a TIMESTAMP field that will be used to filter records using a bounded time window.The processor will return only those records with a timestamp value newer than the timestamp recorded after the last processor run.\",\n-                                \"displayName\": \"Age Field\",\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"age-field\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"create-zero-record-files\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether or not to create a FlowFile when the Salesforce REST API does not return any records\",\n-                                \"displayName\": \"Create Zero Record FlowFiles\",\n+                            \"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\": \"create-zero-record-files\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Collection Name\",\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+                            \"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\": \"custom-soql-query\",\n+                                \"name\": \"Mongo Database Name\",\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+                            \"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\": \"custom-where-condition\",\n+                                \"name\": \"Projection\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"field-names\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Comma-separated list of field names requested from the sObject to be queried. When this field is left empty, all fields are queried.\",\n-                                \"displayName\": \"Field Names\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"field-names\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"initial-age-filter\": {\n-                                \"dependencies\": [\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-send-empty\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"propertyDisplayName\": \"Age Field\",\n-                                        \"propertyName\": \"age-field\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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                                 \"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-M4\"\n-                                }\n+                                \"name\": \"get-mongo-send-empty\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"query-type\": {\n+                            \"json-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide query by properties.\",\n-                                        \"displayName\": \"Property Based Query\",\n-                                        \"value\": \"property-based-query\"\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\": \"Provide custom SOQL query.\",\n-                                        \"displayName\": \"Custom Query\",\n-                                        \"value\": \"custom-query\"\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\": \"property-based-query\",\n-                                \"description\": \"Choose to provide the query by parameters or a full custom query.\",\n-                                \"displayName\": \"Query Type\",\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\": \"query-type\",\n+                                \"name\": \"json-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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"read-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\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+                            \"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-M4\"\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+                            \"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\": \"salesforce-api-version\",\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"salesforce-url\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-query-attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sobject-name\": {\n-                                \"dependencies\": [\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+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"property-based-query\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Type\",\n-                                        \"propertyName\": \"query-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"The Salesforce sObject to be queried\",\n-                                \"displayName\": \"sObject Name\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sobject-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"use-pretty-printing\",\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+                                \"description\": \"All FlowFiles that have the results of a successful query execution go here.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query fails.\",\n+                                \"description\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The input flowfile gets sent to this relationship when the query succeeds.\",\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-                            \"query\",\n-                            \"salesforce\",\n-                            \"sobject\",\n-                            \"soql\"\n+                            \"get\",\n+                            \"mongodb\",\n+                            \"read\"\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.mongodb.GetMongo\",\n+                        \"typeDescription\": \"Creates FlowFiles from documents in MongoDB loaded by a user-specified query.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n                             },\n                             {\n-                                \"description\": \"Sets the total number of records in the FlowFile.\",\n-                                \"name\": \"total.record.count\"\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-network-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52046,101 +56184,194 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"Batch Size\": {\n+                                \"description\": \"The number of elements to be returned from the server in one batch\",\n+                                \"displayName\": \"Batch Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Limit\": {\n+                                \"description\": \"The maximum number of elements to return\",\n+                                \"displayName\": \"Limit\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Limit\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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+                            \"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\": \"FIELDS_DESTINATION\",\n+                                \"name\": \"get-mongo-record-writer-factory\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"mongo-client-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n+                                    \"version\": \"2.0.0-M4\"\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-                        \"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\": \"All FlowFiles that have the results of a successful query execution go here.\",\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\": \"All input FlowFiles that are part of a failed query execution go here.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The original raw content\",\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+                        \"supportsBatching\": false,\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+                            \"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.network.ParseNetflowv5\",\n-                        \"typeDescription\": \"Parses netflowv5 byte ingest and add to NiFi flowfile as attributes or JSON content.\",\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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the header fields.\",\n-                                \"name\": \"netflowv5.header.*\"\n+                                \"description\": \"The database where the results came from.\",\n+                                \"name\": \"mongo.database.name\"\n                             },\n                             {\n-                                \"description\": \"The key and value generated by the parsing of the record fields.\",\n-                                \"name\": \"netflowv5.record.*\"\n+                                \"description\": \"The collection where the results came from.\",\n+                                \"name\": \"mongo.collection.name\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-network-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52153,361 +56384,194 @@\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-                            \"PCAP Max Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"description\": \"Maximum size of each output PCAP file. PCAP packets larger than the configured size result in routing FlowFiles to the failure relationship.\",\n-                                \"displayName\": \"PCAP Max Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"PCAP Max Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"sideEffectFree\": true,\n-                        \"supportedRelationships\": [\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\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The individual PCAP 'segments' of the original PCAP 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\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Capture\",\n-                            \"Network\",\n-                            \"PCAP\",\n-                            \"Packet\",\n-                            \"Splitter\",\n-                            \"TShark\",\n-                            \"TcpDump\",\n-                            \"WinDump\",\n-                            \"Wireshark\",\n-                            \"sniffers\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.network.pcap.SplitPCAP\",\n-                        \"typeDescription\": \"Splits one pcap file into multiple pcap files based on a maximum size.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The reason the FlowFile was sent to the failure relationship.\",\n-                                \"name\": \"error.reason\"\n-                            },\n-                            {\n-                                \"description\": \"All split PCAP FlowFiles produced from the same parent PCAP 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 PCAP FlowFiles that were created from a single parent PCAP FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split PCAP FlowFiles generated from the parent PCAP FlowFile\",\n-                                \"name\": \"fragment.count\"\n-                            },\n-                            {\n-                                \"description\": \"The filename of the parent PCAP FlowFile\",\n-                                \"name\": \"segment.original.filename\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-2-6-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                            \"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+                            \"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\": \"ack.wait.time\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"Mode\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"insert\",\n+                                        \"value\": \"insert\"\n                                     },\n                                     {\n-                                        \"description\": \"Records are considered 'transmitted unsuccessfully' unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration.\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"update\",\n+                                        \"value\": \"update\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                                \"defaultValue\": \"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\": \"acks\",\n+                                \"name\": \"Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\n+                            \"Mongo Collection Name\": {\n+                                \"description\": \"The name of the collection to use\",\n+                                \"displayName\": \"Mongo Collection Name\",\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\": \"Mongo Collection Name\",\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+                            \"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\": \"compression.type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Query 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.kerberos.SelfContainedKerberosUserService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"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\": \"max.request.size\",\n+                                \"name\": \"Upsert\",\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+                            \"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\": \"message-header-encoding\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"record-sink-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records.\",\n-                                \"displayName\": \"Record Writer\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n-                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"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-M4\"\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-                            \"security.protocol\": {\n+                            \"put-mongo-update-mode\": {\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\": \"With whole document\",\n+                                        \"value\": \"doc\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n+                                        \"displayName\": \"With operators enabled\",\n+                                        \"value\": \"operators\"\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\": \"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\": \"security.protocol\",\n+                                \"name\": \"put-mongo-update-mode\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putmongo-update-query\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                        \"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-M4\"\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-                        \"supportsDynamicProperties\": true,\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-                            \"kafka\",\n-                            \"record\",\n-                            \"sink\"\n+                            \"insert\",\n+                            \"mongodb\",\n+                            \"put\",\n+                            \"update\",\n+                            \"write\"\n                         ],\n-                        \"type\": \"org.apache.nifi.record.sink.kafka.KafkaRecordSink_2_6\",\n-                        \"typeDescription\": \"Provides a service to write records to a Kafka 2.6+ topic.\",\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.mongodb.PutMongo\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to MongoDB\",\n+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -52515,678 +56579,558 @@\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. This value should be false when a PublishKafkaRecord processor is expected to commit the offsets using Exactly Once semantics, and should be reserved for dataflows that are designed to run within Stateless NiFi. See Processor's Usage / Additional Details for more information. Note that setting this value to false can lead to significant data duplication or potentially even data loss if the dataflow is not properly configured.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n+                            \"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\": \"auto.offset.reset\",\n+                                \"name\": \"Character Set\",\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+                            \"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\": \"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+                                \"name\": \"Mongo Collection Name\",\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+                            \"Mongo 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\": \"group.id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Mongo Database Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"header-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"A Regular Expression that is matched against all message headers. Any message header whose name matches the regex will be added to the FlowFile as an Attribute. If not specified, no Header values will be added as FlowFile attributes. If two messages have a different value for the same header and that header is selected by the provided regex, then those two messages must be added to different FlowFiles. As a result, users should be cautious about using a regex like \\\".*\\\" if messages are expected to have header values that are unique per message, such as an identifier or timestamp, because it will prevent NiFi from bundling the messages together efficiently.\",\n-                                \"displayName\": \"Headers to Add as Attributes (Regex)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"header-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"honor-transactions\": {\n+                            \"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\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                                \"description\": \"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\": \"honor-transactions\",\n+                                \"name\": \"Ordered\",\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+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-user-service\",\n+                                \"name\": \"mongo-client-service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to MongoDB are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"key-attribute-encoding\": {\n+                            {\n+                                \"description\": \"All FlowFiles that are written to MongoDB 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+                        \"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+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"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\": \"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+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"The key will not be added as an Attribute\",\n-                                        \"displayName\": \"Do Not Add Key as Attribute\",\n-                                        \"value\": \"do-not-add\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"utf-8\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\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\": \"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\": \"key-attribute-encoding\",\n+                                \"name\": \"bypass-validation\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-format\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a UTF-8 string.\",\n-                                        \"displayName\": \"String\",\n-                                        \"value\": \"string\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a byte array.\",\n-                                        \"displayName\": \"Byte Array\",\n-                                        \"value\": \"byte-array\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Format the Kafka ConsumerRecord key as a record.\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"byte-array\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Output Strategy\",\n-                                        \"propertyName\": \"output-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies how to represent the Kafka Record's Key in the output\",\n-                                \"displayName\": \"Key Format\",\n+                            \"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\": \"key-format\",\n+                                \"name\": \"insert_count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"key-record-reader\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"record\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Key Format\",\n-                                        \"propertyName\": \"key-format\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Record Reader to use for parsing the Kafka Record's key into a Record\",\n-                                \"displayName\": \"Key Record Reader\",\n+                            \"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\": \"key-record-reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"max-uncommit-offset-wait\": {\n-                                \"defaultValue\": \"1 secs\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Commit Offsets\",\n-                                        \"propertyName\": \"Commit Offsets\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the maximum amount of time allowed to pass before offsets must be committed. This value impacts how often offsets will be committed.  Committing offsets less often increases throughput but also increases the window of potential data duplication in the event of a rebalance or JVM restart between commits.  This value is also related to maximum poll records and the use of a message demarcator.  When using a message demarcator we can have far more uncommitted messages than when we're not as there is much less for us to keep track of in memory.\",\n-                                \"displayName\": \"Max Uncommitted Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-uncommit-offset-wait\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"max.poll.records\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"Specifies the maximum number of records Kafka should return in a single poll.\",\n-                                \"displayName\": \"Max Poll Records\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.poll.records\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"message-header-encoding\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Any message header that is found on a Kafka message will be added to the outbound FlowFile as an attribute. This property indicates the Character Encoding to use for deserializing the headers.\",\n-                                \"displayName\": \"Message Header Encoding\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"output-strategy\": {\n+                            \"ordered\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Write only the Kafka Record value to the FlowFile record.\",\n-                                        \"displayName\": \"Use Content as Value\",\n-                                        \"value\": \"USE_VALUE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the FlowFile record. (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to output the Kafka record into a FlowFile record.\",\n-                                \"displayName\": \"Output Strategy\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"Perform ordered or unordered operations\",\n+                                \"displayName\": \"Ordered\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"output-strategy\",\n+                                \"name\": \"ordered\",\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+                                \"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-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Value Writer\",\n+                            \"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\": \"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-M4\"\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+                                \"name\": \"update-key-fields\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.mechanism\": {\n+                            \"update-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n+                                        \"description\": \"Updates only the first document that matches the query.\",\n+                                        \"displayName\": \"Update One\",\n+                                        \"value\": \"one\"\n                                     },\n                                     {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n+                                        \"description\": \"Updates every document that matches the query.\",\n+                                        \"displayName\": \"Update Many\",\n+                                        \"value\": \"many\"\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+                                        \"description\": \"Use the value of the 'mongodb.update.mode' attribute of the incoming flowfile. Acceptable values are 'one' and 'many'.\",\n+                                        \"displayName\": \"Use 'mongodb.update.mode' flowfile attribute.\",\n+                                        \"value\": \"flowfile-attribute\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"one\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Salted Challenge Response Authentication Mechanism using SHA-256 with username and password\",\n-                                        \"displayName\": \"SCRAM-SHA-512\",\n-                                        \"value\": \"SCRAM-SHA-512\"\n+                                        \"propertyDisplayName\": \"Update Key Fields\",\n+                                        \"propertyName\": \"update-key-fields\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\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\": \"sasl.mechanism\",\n-                                \"required\": true,\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-                            \"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+                            {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\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+                            \"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-                                \"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\": \"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\": \"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\": \"allow-disk-use\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"json-type\": {\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+                                        \"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\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\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\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"security.protocol\",\n+                                \"name\": \"json-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, two Records will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n+                            \"mongo-agg-query\": {\n+                                \"description\": \"The aggregation query to be executed.\",\n+                                \"displayName\": \"Query\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-agg-query\",\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+                            \"mongo-charset\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies the character set of the document data.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"mongo-charset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"mongo-client-service\": {\n+                                \"description\": \"If configured, this property will use the assigned client service for connection pooling.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ssl.context.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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"topic\",\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-                            \"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+                            \"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+                                \"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\": \"topic_type\",\n-                                \"required\": true,\n+                                \"name\": \"results-per-flowfile\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafkaRecord_2_6\",\n-                            \"org.apache.nifi.processors.kafka.pubsub.PublishKafka_2_6\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a message from Kafka cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n-                                \"name\": \"parse.failure\"\n+                                \"description\": \"The result set of the aggregation will be sent to this relationship.\",\n+                                \"name\": \"results\"\n                             },\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 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\": true,\n+                        \"supportsDynamicProperties\": false,\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+                            \"aggregate\",\n+                            \"aggregation\",\n+                            \"mongo\"\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.mongodb.RunMongoAggregation\",\n+                        \"typeDescription\": \"A processor that runs an aggregation query whenever a flowfile is received.\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -53194,548 +57138,276 @@\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not this Processor should commit the offsets to Kafka after receiving messages. Typically, we want this value set to true so that messages that are received are not duplicated. However, in certain scenarios, we may want to avoid committing the offsets, that the data can be processed and later acknowledged by PublishKafkaRecord in order to provide Exactly Once semantics. See Processor's Usage / Additional Details for more information.\",\n-                                \"displayName\": \"Commit Offsets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Commit Offsets\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"60 secs\",\n-                                \"description\": \"Specifies the timeout that the consumer should use when communicating with the Kafka Broker\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"auto.offset.reset\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the earliest offset\",\n-                                        \"displayName\": \"earliest\",\n-                                        \"value\": \"earliest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Automatically reset the offset to the latest offset\",\n-                                        \"displayName\": \"latest\",\n-                                        \"value\": \"latest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Throw exception to the consumer if no previous offset is found for the consumer's group\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"latest\",\n-                                \"description\": \"Allows you to manage the condition when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted). Corresponds to Kafka's 'auto.offset.reset' property.\",\n-                                \"displayName\": \"Offset Reset\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"auto.offset.reset\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n+                            \"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\": \"aws.profile.name\",\n+                                \"name\": \"delete-gridfs-query\",\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-                                \"dynamic\": false,\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-                            \"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+                            \"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\": \"header-name-regex\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"honor-transactions\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should honor transactional guarantees when communicating with Kafka. If false, the Processor will use an \\\"isolation level\\\" of read_uncomitted. This means that messages will be received as soon as they are written to Kafka but will be pulled, even if the producer cancels the transactions. If this value is true, NiFi will not receive any messages for which the producer's transaction was canceled, but this can result in some latency since the consumer must wait for the producer to finish its entire transaction instead of pulling as the messages become available.\",\n-                                \"displayName\": \"Honor Transactions\",\n+                            \"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\": \"honor-transactions\",\n+                                \"name\": \"gridfs-client-service\",\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+                                    \"artifact\": \"nifi-mongodb-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.mongodb.MongoDBClientService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"key-attribute-encoding\",\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-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+                            \"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\": \"max-uncommit-offset-wait\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\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+                            \"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\": \"max.poll.records\",\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-                            \"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+                            {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-mongodb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"message-demarcator\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-bucket-name\",\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+                            \"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\": \"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-                                \"required\": false,\n-                                \"sensitive\": false\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-M4\"\n+                                }\n                             },\n-                            \"sasl.mechanism\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"General Security Services API for Kerberos authentication\",\n-                                        \"displayName\": \"GSSAPI\",\n-                                        \"value\": \"GSSAPI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Plain username and password authentication\",\n-                                        \"displayName\": \"PLAIN\",\n-                                        \"value\": \"PLAIN\"\n-                                    },\n-                                    {\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+                            \"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\": \"sasl.mechanism\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-database-name\",\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-                                \"allowableValues\": [\n-                                    {\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+                            \"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\": \"sasl.token.auth\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-query\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"mongo-operation-mode\": {\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+                                        \"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\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\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\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"security.protocol\",\n+                                \"name\": \"mongo-operation-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"separate-by-key\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If true, and the <Message Demarcator> property is set, two messages will only be added to the same FlowFile if both of the Kafka Messages have identical keys.\",\n-                                \"displayName\": \"Separate By Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"separate-by-key\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"ssl.context.service\": {\n-                                \"description\": \"Service supporting SSL communication with Kafka brokers\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"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\": \"ssl.context.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.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\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-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"topic_type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Topic is a full topic name or comma separated list of names\",\n-                                        \"displayName\": \"names\",\n-                                        \"value\": \"names\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Topic is a regex using the Java Pattern syntax\",\n-                                        \"displayName\": \"pattern\",\n-                                        \"value\": \"pattern\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"names\",\n-                                \"description\": \"Specifies whether the Topic(s) provided are a comma separated list of names or a single regular expression\",\n-                                \"displayName\": \"Topic Name Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"topic_type\",\n-                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles received from Kafka. Depending on demarcation strategy it is a flow file per message or a bundle of messages grouped by topic and partition.\",\n+                                \"description\": \"When the operation succeeds, the flowfile is sent to this relationship.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"When there is a failure processing the flowfile, it goes to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Consume\",\n-                            \"Get\",\n-                            \"Ingest\",\n-                            \"Ingress\",\n-                            \"Kafka\",\n-                            \"PubSub\",\n-                            \"Topic\"\n+                            \"fetch\",\n+                            \"gridfs\",\n+                            \"mongo\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.kafka.pubsub.ConsumeKafka_2_6\",\n-                        \"typeDescription\": \"Consumes messages from Apache Kafka specifically built against the Kafka 2.6 Consumer API. The complementary NiFi processor for sending messages is PublishKafka_2_6.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"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-kafka-2-6-nar\",\n+                        \"artifact\": \"nifi-mongodb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -53743,1270 +57415,1068 @@\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+                            \"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\": \"Failure Strategy\",\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-M4\"\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-                            \"Record Metadata Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic will be determined using the 'Topic Name' processor property. The partition will be determined using the 'Partition' and 'Partitioner class' properties.\",\n-                                        \"displayName\": \"Use Configured Values\",\n-                                        \"value\": \"Use Configured Values\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Kafka Record's Topic and Partition will be determined by looking at the /metadata/topic and /metadata/partition fields of the Record, respectively. If these fields are invalid or not present, the Topic Name and Partition/Partitioner class properties of the processor will be considered.\",\n-                                        \"displayName\": \"Metadata From Record\",\n-                                        \"value\": \"Metadata From Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Use Configured Values\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_WRAPPER\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies whether the Record's metadata (topic and partition) should come from the Record's metadata field or if it should come from the configured Topic Name and Partition / Partitioner class properties\",\n-                                \"displayName\": \"Record Metadata Strategy\",\n+                            \"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\": \"Record Metadata Strategy\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"gridfs-file-name\",\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+                            \"putgridfs-chunk-size\": {\n+                                \"defaultValue\": \"256 KB\",\n+                                \"description\": \"Controls the maximum size of each chunk of a file uploaded into GridFS.\",\n+                                \"displayName\": \"Chunk Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ack.wait.time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"putgridfs-chunk-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"acks\": {\n+                            \"putgridfs-enforce-uniqueness\": {\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\": \"No uniqueness will be enforced.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"none\"\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\": \"Both the filename and hash must be unique.\",\n+                                        \"displayName\": \"Both\",\n+                                        \"value\": \"both\"\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\": \"Only the filename must be unique.\",\n+                                        \"displayName\": \"Name\",\n+                                        \"value\": \"name\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Only the file hash must be unique.\",\n+                                        \"displayName\": \"Hash\",\n+                                        \"value\": \"hash\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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\": \"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\": \"acks\",\n+                                \"name\": \"putgridfs-enforce-uniqueness\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"attribute-name-regex\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"USE_VALUE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Publish Strategy\",\n-                                        \"propertyName\": \"publish-strategy\"\n-                                    }\n-                                ],\n-                                \"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+                            \"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\": \"attribute-name-regex\",\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-                            \"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+                            \"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\": \"aws.profile.name\",\n+                                \"name\": \"putgridfs-properties-prefix\",\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-                            \"bootstrap.servers\": {\n-                                \"defaultValue\": \"localhost:9092\",\n-                                \"description\": \"Comma-separated list of Kafka Brokers in the format host:port\",\n-                                \"displayName\": \"Kafka Brokers\",\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+                            \"gridfs\",\n+                            \"mongo\",\n+                            \"put\",\n+                            \"store\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-pgp-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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\": \"bootstrap.servers\",\n-                                \"required\": true,\n+                                \"name\": \"Catalog Name\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"compression.type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                            \"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\": \"compression.type\",\n+                                \"name\": \"Database Connection Pooling Service\",\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.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"max.block.ms\",\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-social-media-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-social-media-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                        \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"backfill-minutes\",\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+                            \"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\": \"max.request.size\",\n+                                \"name\": \"backoff-attempts\",\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+                            \"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\": \"message-header-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"backoff-time\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-key-field\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"base-path\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to. How this value is interpreted is dictated by the <Partitioner class> property.\",\n-                                \"displayName\": \"Partition\",\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\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+                            \"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\": \"partitioner.class\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"bearer-token\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"publish-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Write only the FlowFile content to the Kafka Record value.\",\n-                                        \"displayName\": \"Use Content as Record Value\",\n-                                        \"value\": \"USE_VALUE\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Write the Kafka Record key, value, headers, and metadata into the Kafka Record value.  (See processor usage for more information.)\",\n-                                        \"displayName\": \"Use Wrapper\",\n-                                        \"value\": \"USE_WRAPPER\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"USE_VALUE\",\n-                                \"description\": \"The format used to publish the incoming FlowFile record to Kafka.\",\n-                                \"displayName\": \"Publish Strategy\",\n+                            \"connect-timeout\": {\n+                                \"defaultValue\": \"10 secs\",\n+                                \"description\": \"The maximum time in which client should establish a connection with the Twitter API before a time out. Setting the value to 0 disables connection timeouts.\",\n+                                \"displayName\": \"Connect Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"publish-strategy\",\n+                                \"name\": \"connect-timeout\",\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-key-writer\",\n+                                \"name\": \"expansions\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\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\": \"record-reader\",\n+                                \"name\": \"maximum-backoff-time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use in order to serialize the data before sending to Kafka\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"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\": \"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-M4\"\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+                                \"name\": \"media-fields\",\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+                            \"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\": \"sasl.mechanism\",\n-                                \"required\": true,\n+                                \"name\": \"place-fields\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.password\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"poll-fields\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"sasl.token.auth\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                            \"queue-size\": {\n+                                \"defaultValue\": \"10000\",\n+                                \"description\": \"Maximum size of internal queue for streamed messages\",\n+                                \"displayName\": \"Queue Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"queue-size\",\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+                            \"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\": \"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\": \"read-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n+                            \"stream-endpoint\": {\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+                                        \"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\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\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\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"security.protocol\",\n+                                \"name\": \"stream-endpoint\",\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+                            \"tweet-fields\": {\n+                                \"description\": \"A comma-separated list of tweet fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/tweet for proper usage. Possible field values include: attachments, author_id, context_annotations, conversation_id, created_at, entities, geo, id, in_reply_to_user_id, lang, non_public_metrics, organic_metrics, possibly_sensitive, promoted_metrics, public_metrics, referenced_tweets, reply_settings, source, text, withheld\",\n+                                \"displayName\": \"Tweet Fields\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\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-                                \"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\": \"tweet-fields\",\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+                            \"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\": \"use-transactions\",\n-                                \"required\": true,\n+                                \"name\": \"user-fields\",\n+                                \"required\": false,\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                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\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\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Record\",\n-                            \"Send\",\n-                            \"avro\",\n-                            \"csv\",\n                             \"json\",\n-                            \"logs\"\n+                            \"social media\",\n+                            \"status\",\n+                            \"tweets\",\n+                            \"twitter\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success.\",\n-                                \"name\": \"msg.count\"\n+                                \"description\": \"The MIME Type set to application/json\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of Tweets in the FlowFile\",\n+                                \"name\": \"tweets\"\n                             }\n                         ]\n-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-image-viewer-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-asana-services-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-kafka-2-6-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-asana-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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\": \"Failure Strategy\",\n+                                \"name\": \"asana-api-url\",\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+                            \"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\": \"ack.wait.time\",\n+                                \"name\": \"asana-personal-access-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"acks\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success after successfully sending the content to a Kafka node, without waiting for any acknowledgment from the node at all. This provides the best performance but may result in data loss.\",\n-                                        \"displayName\": \"Best Effort\",\n-                                        \"value\": \"0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to success if the message is received by a single Kafka node, whether or not it is replicated. This is faster than <Guarantee Replicated Delivery> but can result in data loss if a Kafka node crashes\",\n-                                        \"displayName\": \"Guarantee Single Node Delivery\",\n-                                        \"value\": \"1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"FlowFile will be routed to failure unless the message is replicated to the appropriate number of Kafka Nodes according to the Topic configuration\",\n-                                        \"displayName\": \"Guarantee Replicated Delivery\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"description\": \"Specifies the requirement for guaranteeing that a message is sent to Kafka. Corresponds to Kafka's 'acks' property.\",\n-                                \"displayName\": \"Delivery Guarantee\",\n+                            \"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\": \"acks\",\n+                                \"name\": \"asana-workspace-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"attribute-name-regex\": {\n-                                \"description\": \"A Regular Expression that is matched against all FlowFile attribute names. Any attribute whose name matches the regex will be added to the Kafka messages as a Header. If not specified, no FlowFile attributes will be added as headers.\",\n-                                \"displayName\": \"Attributes to Send as Headers (Regex)\",\n+                            }\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-standard-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"component-type\": {\n+                                \"description\": \"Components of the given type will produce a rule violation (i.e. they shouldn't exist). Either the simple or the fully qualified name of the type should be provided.\",\n+                                \"displayName\": \"Component Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"attribute-name-regex\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws.profile.name\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AWS_MSK_IAM\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Amazon Web Services Profile to select when multiple profiles are available.\",\n-                                \"displayName\": \"AWS Profile Name\",\n-                                \"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-                            },\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+                                \"name\": \"component-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"compression.type\": {\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"component\",\n+                            \"controller service\",\n+                            \"processor\",\n+                            \"type\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.flowanalysis.rules.DisallowComponentType\",\n+                        \"typeDescription\": \"Produces rule violations for each component (i.e. processors or controller services) of a given type.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"lz4\",\n-                                        \"value\": \"lz4\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"This parameter allows you to specify the compression codec for all data generated by this producer.\",\n-                                \"displayName\": \"Compression Type\",\n+                                \"defaultValue\": \"Generic\",\n+                                \"description\": \"The type/flavor of database, used for generating database-specific code. In many cases the Generic type should suffice, but some databases (such as Oracle) require custom SQL clauses. \",\n+                                \"displayName\": \"Database Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"compression.type\",\n+                                \"name\": \"db-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kafka-key\": {\n-                                \"description\": \"The Key to use for the Message. If not specified, the flow file attribute 'kafka.key' is used as the message key, if it is present.Beware that setting Kafka key and demarcating at the same time may potentially lead to many Kafka messages with the same key.Normally this is not a problem as Kafka does not enforce or assume message and key uniqueness. Still, setting the demarcator and Kafka key at the same time poses a risk of data loss on Kafka. During a topic compaction on Kafka, messages will be deduplicated based on this key.\",\n-                                \"displayName\": \"Kafka Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"kafka-key\",\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+                            \"dbcp-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\": \"kerberos-user-service\",\n-                                \"required\": false,\n+                                \"name\": \"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.kerberos.SelfContainedKerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"parameter-group-name-column\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"grouping-by-column\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\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+                                \"description\": \"The name of a column containing the name of the parameter group into which the parameter should be mapped.\",\n+                                \"displayName\": \"Parameter Group Name Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-attribute-encoding\",\n+                                \"name\": \"parameter-group-name-column\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max.block.ms\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"The amount of time publisher will wait to obtain metadata or wait for the buffer to flush during the 'send' call before failing the entire 'send' call. Corresponds to Kafka's 'max.block.ms' property\",\n-                                \"displayName\": \"Max Metadata Wait Time\",\n+                            \"parameter-grouping-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A single table is partitioned by the 'Parameter Group Name Column'.  All rows with the same value in this column will map to a group of the same name.\",\n+                                        \"displayName\": \"Column\",\n+                                        \"value\": \"grouping-by-column\"\n+                                    },\n+                                    {\n+                                        \"description\": \"An entire table maps to a Parameter Group.  The group name will be the table name.\",\n+                                        \"displayName\": \"Table Name\",\n+                                        \"value\": \"grouping-by-table-name\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"grouping-by-column\",\n+                                \"description\": \"The strategy used to group parameters.\",\n+                                \"displayName\": \"Parameter Grouping Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"max.block.ms\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameter-grouping-strategy\",\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+                            \"parameter-name-column\": {\n+                                \"description\": \"The name of a column containing the parameter name.\",\n+                                \"displayName\": \"Parameter Name Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max.request.size\",\n+                                \"name\": \"parameter-name-column\",\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+                            \"parameter-value-column\": {\n+                                \"description\": \"The name of a column containing the parameter value.\",\n+                                \"displayName\": \"Parameter Value Column\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"message-header-encoding\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"partition\": {\n-                                \"description\": \"Specifies which Partition Records will go to.\",\n-                                \"displayName\": \"Partition\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"partition\",\n-                                \"required\": false,\n+                                \"name\": \"parameter-value-column\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partitioner.class\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Messages will be assigned partitions in a round-robin fashion, sending the first message to Partition 1, the next Partition to Partition 2, and so on, wrapping as necessary.\",\n-                                        \"displayName\": \"RoundRobinPartitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$RoundRobinPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The default partitioning strategy will choose the sticky partition that changes when the batch is full (See KIP-480 for details about sticky partitioning).\",\n-                                        \"displayName\": \"DefaultPartitioner\",\n-                                        \"value\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Interprets the <Partition> property as Expression Language that will be evaluated against each FlowFile. This Expression will be evaluated once against the FlowFile, so all Records in a given FlowFile will go to the same partition.\",\n-                                        \"displayName\": \"Expression Language Partitioner\",\n-                                        \"value\": \"org.apache.nifi.processors.kafka.pubsub.Partitioners$ExpressionLanguagePartitioner\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"org.apache.kafka.clients.producer.internals.DefaultPartitioner\",\n-                                \"description\": \"Specifies which class to use to compute a partition id for a message. Corresponds to Kafka's 'partitioner.class' property.\",\n-                                \"displayName\": \"Partitioner class\",\n+                            \"sql-where-clause\": {\n+                                \"description\": \"A optional SQL query 'WHERE' clause by which to filter all results.  The 'WHERE' keyword should not be included.\",\n+                                \"displayName\": \"SQL WHERE clause\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioner.class\",\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\": \"sql-where-clause\",\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+                            \"table-name\": {\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"grouping-by-column\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"GSSAPI\",\n-                                \"description\": \"SASL mechanism used for authentication. Corresponds to Kafka Client sasl.mechanism property\",\n-                                \"displayName\": \"SASL Mechanism\",\n+                                \"description\": \"The name of the database table containing the parameters.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.mechanism\",\n+                                \"name\": \"table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.password\": {\n+                            \"table-names\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"grouping-by-table-name\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Parameter Grouping Strategy\",\n+                                        \"propertyName\": \"parameter-grouping-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Password provided with configured username when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Password\",\n+                                \"description\": \"A comma-separated list of names of the database tables containing the parameters.\",\n+                                \"displayName\": \"Table Names\",\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+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"table-names\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"sql\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.DatabaseParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from database tables\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read environment variables, which may contain environment credentials.\",\n+                                \"requiredPermission\": \"access environment credentials\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"environment-variable-inclusion-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"All Environment Variables will be included\",\n+                                        \"displayName\": \"Include All\",\n+                                        \"value\": \"include-all\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"dependencies\": [\n+                                        \"description\": \"List comma-separated Environment Variable names to include\",\n+                                        \"displayName\": \"Comma-Separated\",\n+                                        \"value\": \"comma-separated\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"description\": \"Include Environment Variable names that match a Regular Expression\",\n+                                        \"displayName\": \"Regular Expression\",\n+                                        \"value\": \"regex\"\n                                     }\n                                 ],\n-                                \"description\": \"Enables or disables Token authentication when using SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Token Authentication\",\n+                                \"defaultValue\": \"include-all\",\n+                                \"description\": \"Indicates how Environment Variables should be included\",\n+                                \"displayName\": \"Environment Variable Inclusion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"sasl.token.auth\",\n-                                \"required\": false,\n+                                \"name\": \"environment-variable-inclusion-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"sasl.username\": {\n+                            \"include-environment-variables\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PLAIN\",\n-                                            \"SCRAM-SHA-512\",\n-                                            \"SCRAM-SHA-256\"\n+                                            \"regex\",\n+                                            \"comma-separated\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SASL Mechanism\",\n-                                        \"propertyName\": \"sasl.mechanism\"\n+                                        \"propertyDisplayName\": \"Environment Variable Inclusion Strategy\",\n+                                        \"propertyName\": \"environment-variable-inclusion-strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"Username provided with configured password when using PLAIN or SCRAM SASL Mechanisms\",\n-                                \"displayName\": \"Username\",\n+                                \"description\": \"Specifies environment variable names that should be included from the fetched environment variables.\",\n+                                \"displayName\": \"Include Environment Variables\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"sasl.username\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-environment-variables\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"security.protocol\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PLAINTEXT\",\n-                                        \"value\": \"PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSL\",\n-                                        \"value\": \"SSL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_PLAINTEXT\",\n-                                        \"value\": \"SASL_PLAINTEXT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SASL_SSL\",\n-                                        \"value\": \"SASL_SSL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"PLAINTEXT\",\n-                                \"description\": \"Security protocol used to communicate with brokers. Corresponds to Kafka Client security.protocol property\",\n-                                \"displayName\": \"Security Protocol\",\n+                            \"parameter-group-name\": {\n+                                \"defaultValue\": \"Environment Variables\",\n+                                \"description\": \"The name of the parameter group that will be fetched.  This indicates the name of the Parameter Context that may receive the fetched parameters.\",\n+                                \"displayName\": \"Parameter Group Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"security.protocol\",\n+                                \"name\": \"parameter-group-name\",\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+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"environment\",\n+                            \"variable\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.EnvironmentVariableParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from environment variables\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"parameter-group-directories\": {\n+                                \"description\": \"A comma-separated list of directory absolute paths that will map to named parameter groups.  Each directory that contains files will map to a parameter group, named after the innermost directory in the path.  Files inside the directory will map to parameter names, whose values are the content of each respective file.\",\n+                                \"displayName\": \"Parameter Group Directories\",\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-M4\"\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+                                \"name\": \"parameter-group-directories\",\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+                            \"parameter-value-byte-limit\": {\n+                                \"defaultValue\": \"256 B\",\n+                                \"description\": \"The maximum byte size of a parameter value.  Since parameter values are pulled from the contents of files, this is a safeguard that can prevent memory issues if large files are included.\",\n+                                \"displayName\": \"Parameter Value Byte Limit\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"transactional-id-prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameter-value-byte-limit\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-transactions\": {\n+                            \"parameter-value-encoding\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"File content is Base64-encoded, and will be decoded before providing the value as a Parameter.\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"base64\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"File content is not encoded, and will be provided directly as a Parameter value.\",\n+                                        \"displayName\": \"Plain text\",\n+                                        \"value\": \"plaintext\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Specifies whether or not NiFi should provide Transactional guarantees when communicating with Kafka. If there is a problem sending data to Kafka, and this property is set to false, then the messages that have already been sent to Kafka will continue on and be delivered to consumers. If this is set to true, then the Kafka transaction will be rolled back so that those messages are not available to consumers. Setting this to true requires that the <Delivery Guarantee> property be set to \\\"Guarantee Replicated Delivery.\\\"\",\n-                                \"displayName\": \"Use Transactions\",\n+                                \"defaultValue\": \"base64\",\n+                                \"description\": \"Indicates how parameter values are encoded inside Parameter files.\",\n+                                \"displayName\": \"Parameter Value Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-transactions\",\n+                                \"name\": \"parameter-value-encoding\",\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+                        \"restricted\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"file\"\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Any FlowFile that cannot be sent to Kafka will be routed to this Relationship\",\n-                                \"name\": \"failure\"\n+                        \"type\": \"org.apache.nifi.parameter.KubernetesSecretParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from files, in the format provided by Kubernetes mounted secrets.  Parameter groups are indicated by a set of directories, and files within the directories map to parameter names. The content of the file becomes the parameter value.  Since Kubernetes mounted Secrets are base64-encoded, the parameter provider defaults to Base64-decoding the value of the parameter from the file.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Access Token\": {\n+                                \"description\": \"Access Token used for authentication against the 1Password APIs.\",\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-                            {\n-                                \"description\": \"FlowFiles for which all content was sent to Kafka.\",\n-                                \"name\": \"success\"\n+                            \"Connect Server\": {\n+                                \"description\": \"HTTP endpoint of the 1Password Connect Server to connect to. Example: http://localhost:8080\",\n+                                \"displayName\": \"Connect Server\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connect Server\",\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-M4\"\n+                                }\n                             }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsDynamicRelationships\": false,\n+                        },\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"2.6\",\n-                            \"Apache\",\n-                            \"Kafka\",\n-                            \"Message\",\n-                            \"PubSub\",\n-                            \"Put\",\n-                            \"Send\"\n+                            \"1Password\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The number of messages that were sent to Kafka for this FlowFile. This attribute is added only to FlowFiles that are routed to success. If the <Message Demarcator> Property is not set, this will always be 1, but if the Property is set, it may be greater than 1.\",\n-                                \"name\": \"msg.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.parameter.OnePasswordParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from 1Password Connect Server\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-image-viewer-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dropbox-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -55019,417 +58489,378 @@\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n+                                \"name\": \"destination\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"include-core-attributes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-core-attributes\",\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+                            \"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                                 \"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-M4\"\n-                                }\n+                                \"name\": \"include-schema\",\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 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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n-                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"Successfully converted attributes to CSV\",\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\": \"Failed to convert attributes to CSV\",\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-                            \"dropbox\",\n-                            \"fetch\",\n-                            \"storage\"\n+                            \"attributes\",\n+                            \"csv\",\n+                            \"flowfile\"\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.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-M4\",\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+                                \"description\": \"CSV representation of the Schema\",\n+                                \"name\": \"CSVSchema\"\n                             },\n                             {\n-                                \"description\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"CSV representation of Attributes\",\n+                                \"name\": \"CSVData\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Attributes List\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Destination\": {\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\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n-                                        \"displayName\": \"All Available\",\n-                                        \"value\": \"all\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\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\": \"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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Destination\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"dependencies\": [\n+                            \"Include Core Attributes\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                                \"defaultValue\": \"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-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-M4\"\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-                            \"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\": \"folder\",\n+                                \"name\": \"Include Core Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"JSON Handling 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+                                        \"description\": \"Escapes JSON attribute values to strings\",\n+                                        \"displayName\": \"Escaped\",\n+                                        \"value\": \"ESCAPED\"\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\": \"Handles JSON attribute values as nested structured objects or arrays\",\n+                                        \"displayName\": \"Nested\",\n+                                        \"value\": \"NESTED\"\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\": \"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\": \"listing-strategy\",\n+                                \"name\": \"JSON Handling 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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"Null Value\",\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-M4\"\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-M4\"\n-                                }\n-                            },\n-                            \"recursive-search\": {\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\": \"true\",\n-                                \"description\": \"Indicates whether to list files from subfolders of the Dropbox folder.\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"flowfile-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\n+                                    }\n+                                ],\n+                                \"description\": \"Apply pretty print formatting to the output.\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"Pretty Print\",\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+                                \"dynamic\": false,\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                             }\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+                        \"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-                            \"dropbox\",\n-                            \"storage\"\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.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.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-M4\",\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+                                \"description\": \"JSON representation of Attributes\",\n+                                \"name\": \"JSONAttributes\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dropbox-processors-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -55437,908 +58868,690 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"A Record Path value, pointing to a field to be counted\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"name\": \"Record Path property\",\n+                                \"value\": \"The Record Path value\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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-                            \"chunked-upload-threshold\": {\n-                                \"defaultValue\": \"150 MB\",\n-                                \"description\": \"The maximum size of the content which is uploaded at once. FlowFiles larger than this threshold are uploaded in chunks. Maximum allowed value is 150 MB.\",\n-                                \"displayName\": \"Chunked Upload Threshold\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-threshold\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"fail\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the specified Dropbox folder.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"dropbox-credential-service\": {\n-                                \"description\": \"Controller Service used to obtain Dropbox credentials (App Key, App Secret, Access Token, Refresh Token). See controller service's Additional Details for more information.\",\n-                                \"displayName\": \"Dropbox Credential Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dropbox-credential-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                            \"record-stats-limit\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"Limit the number of individual stats that are returned for each record path to the top N results.\",\n+                                \"displayName\": \"record-stats-limit\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder\",\n+                                \"name\": \"record-stats-limit\",\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+                            \"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\": \"proxy-configuration-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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"description\": \"If a flowfile is successfully processed, it goes here.\",\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\": \"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-                            \"dropbox\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"metrics\",\n+                            \"record\",\n+                            \"stats\"\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.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-M4\",\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+                                \"description\": \"A count of the records in the record set in the FlowFile.\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"The server modified time of the file\",\n-                                \"name\": \"dropbox.timestamp\"\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\": \"Revision of the file\",\n-                                \"name\": \"dropbox.revision\"\n+                                \"description\": \"Each value discovered for the user defined property will have its own count attribute. Total number of top N value counts to be added is defined by the limit configuration.\",\n+                                \"name\": \"recordStats.<User Defined Property Name>.<value>.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-scripting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\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-                        \"group\": \"org.apache.nifi\",\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Module Directory\": {\n-                                \"description\": \"Comma-separated list of paths to files and/or directories which contain modules required by the script.\",\n-                                \"displayName\": \"Module Directory\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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+                            \"Compression Format\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"gzip\",\n+                                        \"value\": \"gzip\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"deflate\",\n+                                        \"value\": \"deflate\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bzip2\",\n+                                        \"value\": \"bzip2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"xz-lzma2\",\n+                                        \"value\": \"xz-lzma2\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lzma\",\n+                                        \"value\": \"lzma\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy\",\n+                                        \"value\": \"snappy\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy-hadoop\",\n+                                        \"value\": \"snappy-hadoop\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"snappy framed\",\n+                                        \"value\": \"snappy framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"lz4-framed\",\n+                                        \"value\": \"lz4-framed\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"zstd\",\n+                                        \"value\": \"zstd\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"brotli\",\n+                                        \"value\": \"brotli\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"use mime.type attribute\",\n+                                \"description\": \"The compression format to use. Valid values are: GZIP, Deflate, ZSTD, BZIP2, XZ-LZMA2, LZMA, Brotli, Snappy, Snappy Hadoop, Snappy Framed, and LZ4-Framed\",\n+                                \"displayName\": \"Compression Format\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Compression Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"compress\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Compression Format\",\n+                                        \"propertyName\": \"Compression Format\"\n+                                    }\n+                                ],\n+                                \"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\": \"Script Engine\",\n+                                \"name\": \"Compression Level\",\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Update Filename\": {\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, 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\": \"Script Engine\",\n+                                \"name\": \"Update Filename\",\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+                        \"readsAttributes\": [\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-M4\"\n+                                \"description\": \"If the Compression Format is set to use mime.type attribute, this attribute is used to determine the compression type. Otherwise, this attribute is ignored.\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship if they fail to compress/decompress\",\n+                                \"name\": \"failure\"\n                             },\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-M4\"\n+                                \"description\": \"FlowFiles will be transferred to the success relationship after successfully being compressed or decompressed\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"lookup\",\n-                            \"script\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\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+                                \"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-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\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-                        \"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+                        \"tags\": [\n+                            \"brotli\",\n+                            \"bzip2\",\n+                            \"compress\",\n+                            \"content\",\n+                            \"decompress\",\n+                            \"deflate\",\n+                            \"gzip\",\n+                            \"lz4-framed\",\n+                            \"lzma\",\n+                            \"snappy\",\n+                            \"snappy framed\",\n+                            \"snappy-hadoop\",\n+                            \"xz-lzma2\",\n+                            \"zstd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.CompressContent\",\n+                        \"typeDescription\": \"Compresses or decompresses the contents of FlowFiles using a user-specified compression algorithm and updates the mime.type attribute as appropriate. A common idiom is to precede CompressContent with IdentifyMimeType and configure Mode='decompress' AND Compression Format='use mime.type attribute'. When used in this manner, the MIME type is automatically detected and the data is decompressed, if necessary. If decompression is unnecessary, the data is passed through to the 'success' relationship. This processor operates in a very memory efficient way so very large objects well beyond the heap size are generally fine to process.\",\n+                        \"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-                            \"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-M4\"\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-                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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\": \"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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Grouping Attribute\",\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+                            \"Maximum Data Rate\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n+                                    }\n+                                ],\n+                                \"description\": \"The maximum rate at which data should pass through this processor. The format of this property is expected to be a Data Size (such as '1 MB') representing bytes per Time Duration.\",\n+                                \"displayName\": \"Maximum Data Rate\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Maximum Data Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n-                                \"allowableValues\": [\n+                            \"Maximum FlowFile Rate\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\n+                                        \"dependentValues\": [\n+                                            \"data rate or flowfile count\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Rate Control Criteria\",\n+                                        \"propertyName\": \"Rate Control Criteria\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"name\": \"Maximum FlowFile Rate\",\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+                            \"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\": \"Script Body\",\n+                                \"name\": \"Maximum Rate\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Rate Control Criteria\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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\": \"Groovy\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"Rate Control Criteria\",\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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\": \"Script Body\",\n+                                \"name\": \"Rate Controlled Attribute\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Rate Exceeded Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Clojure 1.8.0 [Clojure UNKNOWN]\",\n-                                        \"displayName\": \"Clojure\",\n-                                        \"value\": \"Clojure\"\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\": \"Groovy 4.0.21 [Groovy Scripting Engine 2.0]\",\n-                                        \"displayName\": \"Groovy\",\n-                                        \"value\": \"Groovy\"\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\": \"Clojure\",\n-                                \"description\": \"Language Engine for executing scripts\",\n-                                \"displayName\": \"Script Engine\",\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\": \"Script Engine\",\n+                                \"name\": \"Rate Exceeded 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+                            \"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\": \"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\": \"Time Duration\",\n+                                \"required\": true,\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-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles that were successfully processed\",\n-                                \"name\": \"success\"\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-                                \"description\": \"FlowFiles that failed to be processed\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles are transferred to this relationship under normal conditions\",\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\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"clojure\",\n-                            \"execute\",\n-                            \"groovy\",\n-                            \"script\"\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.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+                        \"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+                            },\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+                            },\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+                            },\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+                            }\n+                        ],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56346,131 +59559,72 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Updates a script engine property specified by the Dynamic Property's key with the value specified by the Dynamic Property's value\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Script Engine Binding property\",\n-                                \"value\": \"Binding property value passed to Script Runner\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to execute arbitrary code assuming all permissions that NiFi has.\",\n-                                \"requiredPermission\": \"execute code\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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+                            \"Input Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to expect for Input\",\n+                                \"displayName\": \"Input Character Set\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Engine\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Input Character Set\",\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+                            \"Output Character Set\": {\n+                                \"description\": \"The name of the CharacterSet to convert to\",\n+                                \"displayName\": \"Output Character Set\",\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\": \"Output Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ExecuteScript\"\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"\",\n+                                \"name\": \"success\"\n+                            }\n                         ],\n-                        \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"Scripts can store and retrieve state using the State Management APIs. Consult the State Manager section of the Developer's Guide for more details.\",\n-                            \"scopes\": [\n-                                \"LOCAL\",\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n-                        \"supportedRelationships\": [],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"groovy\",\n-                            \"invoke\",\n-                            \"script\"\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.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.standard.ConvertCharacterSet\",\n+                        \"typeDescription\": \"Converts a FlowFile's content from one character set to another\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56478,184 +59632,333 @@\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+                            \"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\": \"Module Directory\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Catalog Name\",\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+                            \"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\": \"Record Reader\",\n+                                \"name\": \"JDBC Connection Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Schema Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Statement Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DELETE\",\n+                                        \"value\": \"DELETE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Use statement.type Attribute\",\n+                                        \"value\": \"Use statement.type Attribute\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the type of SQL Statement to generate\",\n+                                \"displayName\": \"Statement Type\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"Statement 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-M4\"\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+                            \"Table Name\": {\n+                                \"description\": \"The name of the table that the statement should update\",\n+                                \"displayName\": \"Table Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Script Body\",\n+                                \"name\": \"Translate Field Names\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"Unmatched Column Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  No notification will be logged\",\n+                                        \"displayName\": \"Ignore Unmatched Columns\",\n+                                        \"value\": \"Ignore Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Any column in the database that does not have a field in the JSON document will be assumed to not be required.  A warning will be logged\",\n+                                        \"displayName\": \"Warn on Unmatched Columns\",\n+                                        \"value\": \"Warn on Unmatched Columns\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A flow will fail if any column in the database that does not have a field in the JSON document.  An error will be logged\",\n+                                        \"displayName\": \"Fail on Unmatched Columns\",\n+                                        \"value\": \"Fail on Unmatched Columns\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Fail on Unmatched Columns\",\n+                                \"description\": \"If an incoming JSON element does not have a field mapping for all of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Column Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Column Behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Unmatched Field Behavior\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Any field in the JSON document that cannot be mapped to a column in the database is ignored\",\n+                                        \"displayName\": \"Ignore Unmatched Fields\",\n+                                        \"value\": \"Ignore Unmatched Fields\"\n+                                    },\n+                                    {\n+                                        \"description\": \"If the JSON document has any field that cannot be mapped to a column in the database, the FlowFile will be routed to the failure relationship\",\n+                                        \"displayName\": \"Fail\",\n+                                        \"value\": \"Fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Ignore Unmatched Fields\",\n+                                \"description\": \"If an incoming JSON element has a field that does not map to any of the database table's columns, this property specifies how to handle the situation\",\n+                                \"displayName\": \"Unmatched Field Behavior\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Unmatched Field Behavior\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Update Keys\": {\n+                                \"description\": \"A comma-separated list of column names that uniquely identifies a row in the database for UPDATE statements. If the Statement Type is UPDATE and this property is not set, the table's Primary Keys are used. In this case, if no Primary Key exists, the conversion to SQL will fail if Unmatched Column Behaviour is set to FAIL. This property is ignored if the Statement Type is INSERT\",\n+                                \"displayName\": \"Update Keys\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Update Keys\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"jts-quoted-identifiers\": {\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\": \"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\": \"Script Engine\",\n-                                \"required\": true,\n+                                \"name\": \"jts-quoted-identifiers\",\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+                            \"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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Script File\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"jts-quoted-table-identifiers\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\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-                        \"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.standard.PutDatabaseRecord\",\n+                            \"org.apache.nifi.processors.standard.PutSQL\"\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+                                \"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\": \"In case of any issue during processing the incoming FlowFile, the incoming FlowFile will be routed to this relationship.\",\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\": \"After successful procession, the incoming FlowFile will be transferred to this relationship. This happens regardless the number of filtered or remaining records.\",\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-                            \"filter\",\n-                            \"groovy\",\n-                            \"record\",\n-                            \"script\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"description\": \"Sets mime.type of FlowFile that is routed to 'sql' to 'text/plain'.\",\n                                 \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of records within the flow file.\",\n-                                \"name\": \"record.count\"\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\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"If the Catalog name is set for this database, specifies the name of the catalog that the SQL statement will update. If no catalog is used, this attribute will not be added. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.catalog\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles routed to the 'sql' relationship for the same incoming FlowFile (multiple will be output for the same incoming FlowFile if the incoming FlowFile is a JSON Array) will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"The number of SQL FlowFiles that were produced for same incoming FlowFile. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming FlowFile.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same incoming FlowFile. This can be used in conjunction with the fragment.identifier and fragment.count attributes to know which FlowFiles originated from the same incoming FlowFile and in what order the SQL FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The types of the Parameters to use are stored in attributes named <sql>.args.1.type, <sql>.args.2.type, <sql>.args.3.type, and so on. The type is a number representing a JDBC Type constant. Generally, this is useful only for software to read and interpret but is added so that a processor such as PutSQL can understand how to interpret the values. The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"The output SQL statements are parametrized in order to avoid SQL Injection Attacks. The values of the Parameters to use are stored in the attributes named sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. Each of these attributes has a corresponding <sql>.args.N.type attribute that indicates how the value should be interpreted when inserting it into the database.The prefix for this attribute ('sql', e.g.) is determined by the SQL Parameter Attribute Prefix property.\",\n+                                \"name\": \"<sql>.args.N.value\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56663,43 +59966,44 @@\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+                            \"Include Zero Record FlowFiles\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"When converting an incoming FlowFile, if the conversion results in no data, this property specifies whether or not a FlowFile will be sent to the corresponding relationship\",\n+                                \"displayName\": \"Include Zero Record FlowFiles\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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\": \"Include Zero Record FlowFiles\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"Record Reader\": {\n-                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\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@@ -56707,155 +60011,94 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\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-M4\"\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+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Once all records in an incoming FlowFile have been partitioned, the original FlowFile is routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are successfully transformed 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-                            \"groovy\",\n-                            \"group\",\n-                            \"organize\",\n-                            \"partition\",\n+                            \"avro\",\n+                            \"convert\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n                             \"record\",\n-                            \"script\",\n-                            \"segment\",\n-                            \"split\"\n+                            \"schema\",\n+                            \"text\"\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+                        \"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-M4\",\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+                                \"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-                                \"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+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -56863,185 +60106,259 @@\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+                            \"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\": \"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\": \"ajust-immediately\",\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+                            \"character-encoding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ISO-8859-1\",\n+                                        \"value\": \"ISO-8859-1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-8\",\n+                                        \"value\": \"UTF-8\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16\",\n+                                        \"value\": \"UTF-16\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16LE\",\n+                                        \"value\": \"UTF-16LE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"UTF-16BE\",\n+                                        \"value\": \"UTF-16BE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"US-ASCII\",\n+                                        \"value\": \"US-ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"description\": \"Specifies a character encoding to use.\",\n+                                \"displayName\": \"Character Encoding\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Reader\",\n+                                \"name\": \"character-encoding\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"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\": \"Record Writer\",\n+                                \"name\": \"split-words-on-symbols\",\n                                 \"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-M4\"\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+                            \"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\": \"Script Body\",\n-                                \"required\": false,\n+                                \"name\": \"text-character-count\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Script Engine\": {\n+                            \"text-line-count\": {\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\": \"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\": \"Script Engine\",\n+                                \"name\": \"text-line-count\",\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+                            \"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\": \"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\": \"text-line-nonempty-count\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"text-word-count\",\n+                                \"required\": true,\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+                            \"org.apache.nifi.processors.standard.SplitText\"\n                         ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Each FlowFile that were successfully transformed will be routed to 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\": \"Any FlowFile that cannot be transformed will be routed to this Relationship\",\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-                            \"filter\",\n-                            \"groovy\",\n-                            \"modify\",\n-                            \"record\",\n-                            \"script\",\n-                            \"transform\",\n-                            \"update\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The number of lines of text present in the FlowFile content\",\n+                                \"name\": \"text.line.count\"\n                             },\n                             {\n-                                \"description\": \"The number of records in the FlowFile\",\n-                                \"name\": \"record.count\"\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\": \"This attribute provides on failure the error message encountered by the Reader or Writer.\",\n-                                \"name\": \"record.error.message\"\n+                                \"description\": \"The number of words present in the original FlowFile\",\n+                                \"name\": \"text.word.count\"\n+                            },\n+                            {\n+                                \"description\": \"The number of characters (given the specified character encoding) present in the original FlowFile\",\n+                                \"name\": \"text.character.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -57049,1656 +60366,878 @@\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-M4\"\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-M4\"\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+                            \"fail_when_empty\": {\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-                                \"dynamic\": false,\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\": \"Script Engine\",\n+                                \"name\": \"fail_when_empty\",\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+                            \"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\": \"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\": \"hash_algorithm\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"restricted\": true,\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.script.ScriptedFilterRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedPartitionRecord\",\n-                            \"org.apache.nifi.processors.script.ScriptedTransformRecord\"\n-                        ],\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFile containing the valid records from the incoming FlowFile will be routed to this relationship. If there are no valid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"valid\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFile containing the invalid records from the incoming FlowFile will be routed to this relationship. If there are no invalid records, no FlowFile will be routed to this Relationship.\",\n-                                \"name\": \"invalid\"\n+                                \"description\": \"Used for flowfiles that have a hash value added\",\n+                                \"name\": \"success\"\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\": \"Used for flowfiles that have no content if the 'fail on empty' setting is enabled\",\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+                            \"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.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.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-M4\",\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+                                \"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-                \"reportingTasks\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-scripting-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"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-                                \"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+                        \"defaultYieldDuration\": \"1 sec\",\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+                            \"@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\": \"Script Engine\",\n+                                \"name\": \"@OnScheduled Pause Time\",\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+                            \"@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\": \"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-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-redis-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-flow-registry-client-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"name\": \"@OnStopped Pause Time\",\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+                            \"@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\": \"Communications Timeout\",\n+                                \"name\": \"@OnUnscheduled Pause Time\",\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+                            \"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\": \"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\": \"Content 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-                                \"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-M4\"\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+                            \"CustomValidate Pause Time\": {\n+                                \"defaultValue\": \"0 sec\",\n+                                \"description\": \"Specifies how long the processor should sleep in the customValidate() method\",\n+                                \"displayName\": \"CustomValidate Pause Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-sink-record-writer\",\n+                                \"name\": \"CustomValidate Pause Time\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\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-                                \"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+                            \"Fail When @OnScheduled called\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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-                        \"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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"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\": \"Communications Timeout\",\n+                                \"name\": \"Fail When @OnScheduled called\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\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\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\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\": \"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 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+                                \"name\": \"Fail When @OnStopped called\",\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-M4\"\n-                                }\n-                            },\n-                            \"include-null-values\": {\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\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\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\": \"include-null-values\",\n+                                \"name\": \"Fail When @OnUnscheduled called\",\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-M4\"\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+                            \"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\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Exception Class\",\n+                                \"required\": true,\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+                            \"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\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Exception Iterations\",\n+                                \"required\": true,\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+                            \"FlowFile Failure Iterations\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"Number of FlowFiles to forward to failure relationship.\",\n+                                \"displayName\": \"FlowFile Failure Iterations\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"s2s-http-proxy-username\",\n-                                \"required\": false,\n+                                \"name\": \"FlowFile Failure Iterations\",\n+                                \"required\": true,\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+                            \"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\": \"s2s-transport-protocol\",\n+                                \"name\": \"FlowFile Rollback Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"restricted\": true,\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"bulletin\",\n-                            \"site\",\n-                            \"site to site\"\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-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            },\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\": \"Communications Timeout\",\n+                                \"name\": \"FlowFile Rollback Penalty Iterations\",\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+                            \"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\": \"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\": \"FlowFile Rollback Yield Iterations\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"FlowFile Success Iterations\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"include-null-values\": {\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\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\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\": \"include-null-values\",\n+                                \"name\": \"Ignore Interrupts When Paused\",\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-M4\"\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+                            \"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\": \"s2s-http-proxy-hostname\",\n-                                \"required\": false,\n+                                \"name\": \"No FlowFile Exception Class\",\n+                                \"required\": true,\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+                            \"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\": \"s2s-http-proxy-port\",\n-                                \"required\": false,\n+                                \"name\": \"No FlowFile Exception Iterations\",\n+                                \"required\": true,\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+                            \"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\": \"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\": \"No FlowFile Skip Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"s2s-metrics-format\": {\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-                                    },\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+                            \"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\": \"s2s-metrics-format\",\n+                                \"name\": \"No FlowFile Yield Iterations\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-metrics-hostname\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"OnTrigger Pause Time\",\n                                 \"required\": true,\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+                            \"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\": \"s2s-transport-protocol\",\n+                                \"name\": \"Write Iterations\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles processed successfully.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that failed to process.\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\n+                            \"FlowFile\",\n+                            \"debug\",\n+                            \"flow\",\n+                            \"processor\",\n+                            \"test\",\n+                            \"utility\"\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+                        \"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+                        \"useCases\": [],\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"explicitRestrictions\": [\n+                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\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+                                \"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-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\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\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"bloom-filter-certainty\",\n+                                \"required\": false,\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+                            \"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\": \"Communications Timeout\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"cache-identifier\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\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\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\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\": \"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 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+                                \"name\": \"deduplication-strategy\",\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+                            \"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\": \"SSL Context Service\",\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.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"include-null-values\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"filter-capacity-hint\": {\n+                                \"defaultValue\": \"25000\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"bloom-filter\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Filter Type\",\n+                                        \"propertyName\": \"filter-type\"\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\": \"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\": \"include-null-values\",\n+                                \"name\": \"filter-capacity-hint\",\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-M4\"\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-                                \"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-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"s2s-transport-protocol\": {\n+                            \"filter-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\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\": \"HTTP\",\n-                                        \"value\": \"HTTP\"\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\": \"RAW\",\n-                                \"description\": \"Specifies which transport protocol to use for Site-to-Site communication.\",\n-                                \"displayName\": \"Transport Protocol\",\n+                                \"defaultValue\": \"hash-set\",\n+                                \"dependencies\": [\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\": \"s2s-transport-protocol\",\n+                                \"name\": \"filter-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"start-position\": {\n+                            \"include-zero-record-flowfiles\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n-                                \"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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-site-to-site-reporting-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                                \"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\": \"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\": \"include-zero-record-flowfiles\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Compress Events\": {\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\": \"true\",\n-                                \"description\": \"Indicates whether or not to compress the data being sent.\",\n-                                \"displayName\": \"Compress Events\",\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Distributed Map Cache client\",\n+                                        \"propertyName\": \"distributed-map-cache\"\n+                                    }\n+                                ],\n+                                \"description\": \"For each record, check whether the cache identifier exists in the distributed map cache. If it doesn't exist and this property is true, put the identifier to the cache.\",\n+                                \"displayName\": \"Cache the Entry Identifier\",\n                                 \"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\": \"put-cache-identifier\",\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-hashing-algorithm\",\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+                            \"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.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"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+                                \"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-M4\"\n                                 }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.DetectDuplicate\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Records detected as duplicates are routed to this relationship.\",\n+                                \"name\": \"duplicate\"\n                             },\n-                            \"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+                                \"description\": \"Records not found in the cache are routed to this relationship.\",\n+                                \"name\": \"non-duplicate\"\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+                                \"description\": \"If unable to communicate with the cache, the FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\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+                                \"description\": \"The original input FlowFile is sent to this relationship unless a fatal error occurs.\",\n+                                \"name\": \"original\"\n                             }\n-                        },\n+                        ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\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-                            \"history\",\n-                            \"metrics\",\n-                            \"site\",\n-                            \"site to site\",\n-                            \"status\"\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-                        \"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-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hazelcast-services-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-update-attribute-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\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+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Number of records written to the destination FlowFile.\",\n+                                \"name\": \"record.count\"\n+                            }\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-update-attribute-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -58706,1479 +61245,978 @@\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\": \"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+                                \"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                         \"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+                            \"Directory Path\": {\n+                                \"defaultValue\": \"${absolute.path}\",\n+                                \"description\": \"The path to the directory the file to delete is located in.\",\n+                                \"displayName\": \"Directory Path\",\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-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Do not store state\",\n-                                        \"value\": \"Do not store state\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Store state locally\",\n-                                        \"value\": \"Store state locally\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Do not store state\",\n-                                \"description\": \"Select whether or not state will be stored. Selecting 'Stateless' will offer the default functionality of purely updating the attributes on a FlowFile in a stateless manner. Selecting a stateful option will not only store the attributes on the FlowFile but also in the Processors state. See the 'Stateful Usage' topic of the 'Additional Details' section of this processor's documentation for more information\",\n-                                \"displayName\": \"Store State\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Store State\",\n+                                \"name\": \"Directory Path\",\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+                            \"Filename\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"The name of the file to delete.\",\n+                                \"displayName\": \"Filename\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"canonical-value-lookup-cache-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Filename\",\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+                        \"restricted\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All successful FlowFiles are routed to this relationship\",\n+                                \"description\": \"All FlowFiles, for which the file to delete did not exist, are routed to this relationship\",\n+                                \"name\": \"not found\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles, for which an existing file has been deleted, are routed to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles, for which an existing file could not be deleted, are 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-                            \"Attribute Expression Language\",\n-                            \"attributes\",\n                             \"delete\",\n-                            \"modification\",\n-                            \"state\",\n-                            \"update\"\n+                            \"file\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"remove\"\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+                        \"type\": \"org.apache.nifi.processors.standard.DeleteFile\",\n+                        \"typeDescription\": \"Deletes a file from the filesystem.\",\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+                                \"configuration\": \"Retrieve a file from the filesystem, e.g. using 'ListFile' and 'FetchFile'.\\nProcess the file using any combination of processors.\\nStore the resulting file to a destination, e.g. using 'PutSFTP'.\\nUsing 'DeleteFile', delete the file from the filesystem only after the result has been stored.\\n\",\n+                                \"description\": \"Delete source file only after its processing completed\",\n                                 \"keywords\": [],\n                                 \"notes\": \"\"\n                             }\n                         ],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"Human-readable reason of failure. Only available if FlowFile is routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.reason\"\n+                            },\n+                            {\n+                                \"description\": \"The class name of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.exception.class\"\n+                            },\n+                            {\n+                                \"description\": \"The message of the exception thrown during processor execution. Only available if an exception caused the FlowFile to be routed to relationship 'failure'.\",\n+                                \"name\": \"DeleteFile.failure.exception.message\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-azure-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"credential-configuration-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n-                                        \"displayName\": \"Default Credential\",\n-                                        \"value\": \"default-credential\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"managed-identity\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"default-credential\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Credential Configuration Strategy\",\n+                            \"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\": \"credential-configuration-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Age Off Duration\",\n+                                \"required\": false,\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+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A FlowFile attribute, or the results of an Attribute Expression Language statement, which will be evaluated against a FlowFile in order to determine the value used to identify duplicates; it is this value that is cached\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-cosmos-db-consistency-level\": {\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 The Entry Identifier\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\n+                                \"name\": \"Cache The Entry Identifier\",\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+                            \"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\": \"azure-cosmos-db-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\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-M4\"\n+                                }\n                             },\n-                            \"azure-cosmos-db-uri\": {\n-                                \"description\": \"Cosmos DB URI, typically in the form of https://{databaseaccount}.documents.azure.com:443/ Note this host URL is for Cosmos DB with Core SQL API from Azure Portal (Overview->URI)\",\n-                                \"displayName\": \"Cosmos DB URI\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-uri\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"FlowFile Description\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                \"version\": \"2.0.0-M4\"\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-                            \"azure\",\n-                            \"cosmos\",\n-                            \"document\",\n-                            \"service\"\n+                            \"dedupe\",\n+                            \"dupe\",\n+                            \"duplicate\",\n+                            \"hash\"\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-M4\"\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-M4\",\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                            \"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-                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\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\": \"Application Tenant ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Authentication Strategy\": {\n+                            \"Distribution Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Azure Application Registration with Application Key\",\n-                                        \"displayName\": \"Application Credentials\",\n-                                        \"value\": \"APPLICATION_CREDENTIALS\"\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\": \"Azure Managed Identity\",\n-                                        \"displayName\": \"Managed Identity\",\n-                                        \"value\": \"MANAGED_IDENTITY\"\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\": \"MANAGED_IDENTITY\",\n-                                \"description\": \"Authentication method for access to Azure Data Explorer\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"round robin\",\n+                                \"description\": \"Determines how the load will be distributed. Relationship weight is in numeric order where '1' has the greatest weight.\",\n+                                \"displayName\": \"Distribution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n+                                \"name\": \"Distribution Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Cluster URI\": {\n-                                \"description\": \"Azure Data Explorer Cluster URI\",\n-                                \"displayName\": \"Cluster URI\",\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\": \"Cluster URI\",\n+                                \"name\": \"Number of Relationships\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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-M4\"\n+                                \"description\": \"Where to route flowfiles for this relationship index\",\n+                                \"name\": \"1\"\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-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\",\n-                            \"azure\",\n-                            \"ingest\"\n+                            \"distribute\",\n+                            \"load balance\",\n+                            \"round robin\",\n+                            \"route\",\n+                            \"weighted\"\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-M4\"\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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the specific relationship the FlowFile has been routed through\",\n+                                \"name\": \"distribute.load.relationship\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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-                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Application Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\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\": \"Application Tenant ID\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Cluster URI\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Number of Copies\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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.data.explorer.KustoQueryService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"The original FlowFile and all copies will be sent to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"duplicate\",\n+                            \"load\",\n+                            \"test\"\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-M4\"\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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A zero-based incrementing integer value based on which copy the FlowFile is.\",\n+                                \"name\": \"copy.index\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"Authentication Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Azure Event Hub shared access key\",\n-                                        \"displayName\": \"Shared Access Key\",\n-                                        \"value\": \"SHARED_ACCESS_KEY\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The Default Azure Credential will read credentials from standard environment variables and will also attempt to read Managed Identity credentials when running in Microsoft Azure environments\",\n-                                        \"displayName\": \"Default Azure Credential\",\n-                                        \"value\": \"DEFAULT_AZURE_CREDENTIAL\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DEFAULT_AZURE_CREDENTIAL\",\n-                                \"description\": \"Strategy for authenticating to Azure Event Hubs\",\n-                                \"displayName\": \"Authentication Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Authentication Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"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\": \"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-                                \"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+                            \"Encoded Line Length\": {\n+                                \"defaultValue\": \"76\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"base32\",\n+                                            \"base64\"\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+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SHARED_ACCESS_KEY\"\n+                                            \"Encode\"\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\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     },\n                                     {\n-                                        \"description\": \"AMQP over HTTPS with WebSockets on port 443\",\n-                                        \"displayName\": \"AMQP_WEB_SOCKETS\",\n-                                        \"value\": \"AmqpWebSockets\"\n+                                        \"dependentValues\": [\n+                                            \"MULTIPLE_LINES\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Line Output Mode\",\n+                                        \"propertyName\": \"Line Output Mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Amqp\",\n-                                \"description\": \"Advanced Message Queuing Protocol Transport Type for communication with Azure Event Hubs\",\n-                                \"displayName\": \"Transport Type\",\n+                                \"description\": \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Encoded Line Length\",\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-M4\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"Encoding\": {\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+                                        \"description\": \"Encode or decode using Base64 set of characters\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"base64\"\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\": \"Encode or decode using Base32 set of characters\",\n+                                        \"displayName\": \"Base32\",\n+                                        \"value\": \"base32\"\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\": \"Encode or decode using hexadecimal set of characters\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"hex\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\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\": \"credentials-type\",\n+                                \"name\": \"Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n-                                \"dependencies\": [\n+                            \"Line Output Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"The encoded content will be written as a single line.\",\n+                                        \"displayName\": \"Single Line\",\n+                                        \"value\": \"SINGLE_LINE\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\",\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"The encoded content will be written as multiple lines.\",\n+                                        \"displayName\": \"Multiple Lines\",\n+                                        \"value\": \"MULTIPLE_LINES\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"service-principal-client-id\": {\n+                                \"defaultValue\": \"SINGLE_LINE\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"base32\",\n+                                            \"base64\"\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+                                        \"propertyDisplayName\": \"Encoding\",\n+                                        \"propertyName\": \"Encoding\"\n+                                    },\n                                     {\n                                         \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n+                                            \"Encode\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Mode\",\n+                                        \"propertyName\": \"Mode\"\n                                     }\n                                 ],\n-                                \"description\": \"Password of the Client/Application.\",\n-                                \"displayName\": \"Service Principal Client Secret\",\n+                                \"description\": \"Controls the line formatting for encoded content based on selected property values.\",\n+                                \"displayName\": \"Line Output Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"service-principal-client-secret\",\n+                                \"name\": \"Line Output Mode\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-tenant-id\": {\n-                                \"dependencies\": [\n+                            \"Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\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-                                \"description\": \"Tenant ID of the Azure Active Directory hosting the Service Principal.\",\n-                                \"displayName\": \"Service Principal Tenant ID\",\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\": \"service-principal-tenant-id\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\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. 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\": \"storage-endpoint-suffix\",\n+                                \"name\": \"Mode\",\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+                        \"sideEffectFree\": true,\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                                \"description\": \"Any FlowFile that cannot be encoded or decoded will be routed to failure\",\n+                                \"name\": \"failure\"\n+                            },\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+                                \"description\": \"Any FlowFile that is successfully encoded or decoded will be routed to success\",\n+                                \"name\": \"success\"\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-M4\"\n-                            }\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-                            \"adls\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"credentials\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"base32\",\n+                            \"base64\",\n+                            \"decode\",\n+                            \"encode\",\n+                            \"hex\"\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"batch-count\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"The maximum number of FlowFiles that EnforceOrder can process at an execution.\",\n+                                \"displayName\": \"Batch Count\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-count\",\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+                            \"group-id\": {\n+                                \"defaultValue\": \"${filename}\",\n+                                \"description\": \"EnforceOrder is capable of multiple ordering groups. 'Group Identifier' is used to determine which group a FlowFile belongs to. This property will be evaluated with each incoming FlowFile. If evaluated result is empty, the FlowFile will be routed to failure.\",\n+                                \"displayName\": \"Group Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"group-id\",\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\": \"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-M4\"\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"adls-credentials-service\",\n+                                \"name\": \"inactive-timeout\",\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-M4\"\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+                            \"initial-order\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"When the first FlowFile of a group arrives, initial target order will be computed and stored in the managed state. After that, target order will start being tracked by EnforceOrder and stored in the state management store. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and initial order will be left unknown until consecutive FlowFiles provide a valid initial order.\",\n+                                \"displayName\": \"Initial Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"initial-order\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\n+                            \"maximum-order\": {\n+                                \"description\": \"If specified, any FlowFiles that have larger order will be routed to failure. This property is computed only once for a given group. After a maximum order is computed, it will be persisted in the state management store and used for other FlowFiles belonging to the same group. If Expression Language is used but evaluated result was not an integer, then the FlowFile will be routed to failure, and maximum order will be left unknown until consecutive FlowFiles provide a valid maximum order.\",\n+                                \"displayName\": \"Maximum Order\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"name\": \"maximum-order\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"order-attribute\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"wait-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"EnforceOrder uses following states per ordering group: '<groupId>.target' is a order number which is being waited to arrive next. When a FlowFile with a matching order arrives, or a FlowFile overtakes the FlowFile being waited for because of wait timeout, target order will be updated to (FlowFile.order + 1). '<groupId>.max is the maximum order number for a group. '<groupId>.updatedAt' is a timestamp when the order of a group was updated last time. These managed states will be removed automatically once a group is determined as inactive, see 'Inactive Timeout' for detail.\",\n+                            \"scopes\": [\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"A FlowFile that waited for preceding FlowFiles longer than Wait Timeout and overtook those FlowFiles, will be routed to this relationship.\",\n+                                \"name\": \"overtook\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile that has an order younger than current, which means arrived too late and skipped, will be routed to this relationship.\",\n+                                \"name\": \"skipped\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with a matching order number will be routed to this relationship.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFile with non matching order will be routed to this relationship\",\n+                                \"name\": \"wait\"\n+                            },\n+                            {\n+                                \"description\": \"A FlowFiles which does not have required attributes, or fails to compute those will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n-                        \"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+                            \"order\",\n+                            \"sort\"\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-M4\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute. This value is used to determine wait timeout.\",\n+                                \"name\": \"EnforceOrder.startedAt\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles going through this processor will have this attribute denoting which relationship it was routed to.\",\n+                                \"name\": \"EnforceOrder.result\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'failure' or 'skipped' relationship will have this attribute describing details.\",\n+                                \"name\": \"EnforceOrder.detail\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles routed to 'wait' or 'skipped' relationship will have this attribute denoting expected order when the FlowFile was processed.\",\n+                                \"name\": \"EnforceOrder.expectedOrder\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\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\": \"The name to register AzureStorageCredentialsService_v12\",\n-                                \"value\": \"The AzureStorageCredentialsService_v12\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-azure-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"name\": \"A FlowFile attribute(if <Destination> is set to 'flowfile-attribute')\",\n+                                \"value\": \"A JsonPath expression\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"credentials-type\": {\n+                            \"Destination\": {\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\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\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\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SAS_TOKEN\",\n-                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n-                                \"displayName\": \"Credentials Type\",\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\": \"credentials-type\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"managed-identity-client-id\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"MANAGED_IDENTITY\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n-                                \"displayName\": \"Managed Identity Client ID\",\n+                            \"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\": \"managed-identity-client-id\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Max String Length\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n+                            \"Null Value Representation\": {\n+                                \"allowableValues\": [\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: HTTP, 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-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"service-principal-client-id\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"empty string\",\n+                                        \"value\": \"empty string\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"the string 'null'\",\n+                                        \"value\": \"the string 'null'\"\n                                     }\n                                 ],\n-                                \"description\": \"Client ID (or Application ID) of the Client/Application having the Service Principal.\",\n-                                \"displayName\": \"Service Principal Client ID\",\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\": \"service-principal-client-id\",\n+                                \"name\": \"Null Value Representation\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-principal-client-secret\": {\n-                                \"dependencies\": [\n+                            \"Path Not Found Behavior\": {\n+                                \"allowableValues\": [\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-                            \"service-principal-tenant-id\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"warn\",\n+                                        \"value\": \"warn\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SERVICE_PRINCIPAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"skip\",\n+                                        \"value\": \"skip\"\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-                            \"storage-account-key\": {\n+                                \"defaultValue\": \"ignore\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"ACCOUNT_KEY\"\n+                                            \"flowfile-attribute\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\n+                                        \"propertyDisplayName\": \"Destination\",\n+                                        \"propertyName\": \"Destination\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-account-name\",\n-                                \"required\": true,\n-                                \"sensitive\": true\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+                                \"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\": \"storage-endpoint-suffix\",\n+                                \"name\": \"Path Not Found Behavior\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n+                            \"Return Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"SAS_TOKEN\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Credentials Type\",\n-                                        \"propertyName\": \"credentials-type\"\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-                                \"description\": \"Shared Access Signature token (the leading '?' may be included)\",\n-                                \"displayName\": \"SAS Token\",\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\": \"storage-sas-token\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"azure-credentials-service\": {\n-                                \"description\": \"Controller service used to obtain Azure credentials to be used with Key Vault client.\",\n-                                \"displayName\": \"Azure Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-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.AzureCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\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-                            \"group-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on the 'group-name' tag value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' tag value that matches this Regex will not be fetched.\",\n-                                \"displayName\": \"Group Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"group-name-pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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                             },\n-                            \"key-vault-uri\": {\n-                                \"description\": \"Vault URI of the Key Vault that contains the secrets\",\n-                                \"displayName\": \"Key Vault URI\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-vault-uri\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-                        \"supportsDynamicProperties\": false,\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-                            \"azure\",\n-                            \"key\",\n-                            \"keyvault\",\n-                            \"secrets\",\n-                            \"vault\"\n+                            \"JSON\",\n+                            \"JsonPath\",\n+                            \"evaluate\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.azure.AzureKeyVaultSecretsParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from Azure Key Vault Secrets.  Each secret becomes a Parameter, which map to a Parameter Group byadding a secret tag named 'group-name'.\",\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-M4\"\n-                    }\n-                ],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60186,217 +62224,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+                        \"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-                            \"azure-cosmos-db-conflict-handling-strategy\": {\n+                            \"Destination\": {\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\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\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\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\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\": \"flowfile-content\",\n+                                \"description\": \"Indicates whether the results of the XPath evaluation are written to the FlowFile content or a FlowFile attribute; if using attribute, must specify the Attribute Name property. If set to flowfile-content, only one XPath may be specified, and the property name is ignored.\",\n+                                \"displayName\": \"Destination\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-conflict-handling-strategy\",\n-                                \"required\": false,\n+                                \"name\": \"Destination\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-connection-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-azure-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"azure-cosmos-db-consistency-level\": {\n+                            \"Return Type\": {\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+                                        \"displayName\": \"auto-detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CONSISTENT_PREFIX\",\n-                                        \"value\": \"CONSISTENT_PREFIX\"\n+                                        \"displayName\": \"nodeset\",\n+                                        \"value\": \"nodeset\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EVENTUAL\",\n-                                        \"value\": \"EVENTUAL\"\n+                                        \"displayName\": \"string\",\n+                                        \"value\": \"string\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SESSION\",\n-                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n-                                \"displayName\": \"Cosmos DB Consistency Level\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-consistency-level\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"azure-cosmos-db-container-id\",\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-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+                                \"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\": \"azure-cosmos-db-name\",\n+                                \"name\": \"Return Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"azure-cosmos-db-partition-key\": {\n-                                \"description\": \"The partition key used to distribute data among servers\",\n-                                \"displayName\": \"Cosmos DB Partition Key\",\n+                            \"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\": \"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\": \"azure-cosmos-db-partition-key\",\n+                                \"name\": \"Validate DTD\",\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-                            \"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-M4\"\n-                                }\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\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\": \"All FlowFiles that are written to Cosmos DB are routed to this relationship\",\n-                                \"name\": \"success\"\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\": 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+                                \"description\": \"Processing requires reading the entire FlowFile into memory\",\n                                 \"resource\": \"MEMORY\"\n                             }\n                         ],\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cosmos\",\n-                            \"insert\",\n-                            \"put\",\n-                            \"record\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"evaluate\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.cosmos.document.PutAzureCosmosDBRecord\",\n-                        \"typeDescription\": \"This processor is a record-aware processor for inserting data into Cosmos DB with Core SQL API. It uses a configured record reader and schema to read an incoming record set from the body of a Flowfile and then inserts those records into a configured Cosmos DB Container.\",\n+                        \"type\": \"org.apache.nifi.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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60404,312 +62378,176 @@\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-                            \"Data Format\": {\n+                            \"Destination\": {\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-                                    },\n-                                    {\n-                                        \"description\": \"An ORC file.\",\n-                                        \"displayName\": \"orc\",\n-                                        \"value\": \"orc\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A parquet file.\",\n-                                        \"displayName\": \"parquet\",\n-                                        \"value\": \"parquet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n-                                        \"displayName\": \"psv\",\n-                                        \"value\": \"psv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"A text file with values separated by semicolons (;).\",\n-                                        \"displayName\": \"scsv\",\n-                                        \"value\": \"scsv\"\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-                                    },\n-                                    {\n-                                        \"description\": \"A text file with tab delimited values (\\\\t).\",\n-                                        \"displayName\": \"tsv\",\n-                                        \"value\": \"tsv\"\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\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\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-                                        \"dependentValues\": [\n-                                            \"true\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Poll for Ingest Status\",\n-                                        \"propertyName\": \"Poll for Ingest Status\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"description\": \"Defines the value of interval of time to poll for ingestion status\",\n-                                \"displayName\": \"Ingest Status Polling Interval\",\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\": \"Ingest Status Polling Interval\",\n+                                \"name\": \"Destination\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingest Status Polling Timeout\": {\n-                                \"defaultValue\": \"5 m\",\n-                                \"dependencies\": [\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+                            \"Output: Indent\": {\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether the processor may add additional whitespace when outputting a result tree.\",\n+                                \"displayName\": \"Output: Indent\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Ingest Status Polling Timeout\",\n+                                \"name\": \"Output: Indent\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ingestion Ignore First Record\": {\n+                            \"Output: Method\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"xml\",\n+                                        \"value\": \"xml\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"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-M4\"\n-                                }\n-                            },\n-                            \"Partially Succeeded Routing Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"success\",\n-                                        \"value\": \"success\"\n+                                        \"displayName\": \"html\",\n+                                        \"value\": \"html\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"failure\",\n-                                        \"value\": \"failure\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\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\": \"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\": \"Partially Succeeded Routing Strategy\",\n+                                \"name\": \"Output: Method\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Poll for Ingest Status\": {\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: Omit XML Declaration\": {\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+                                \"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\": \"Poll for Ingest Status\",\n+                                \"name\": \"Output: Omit XML Declaration\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Streaming Enabled\": {\n+                            \"Validate DTD\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Whether to stream data to Azure Data Explorer.\",\n-                                \"displayName\": \"Streaming Enabled\",\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\": \"Streaming Enabled\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Table Name\",\n+                                \"name\": \"Validate DTD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Ingest processing failed\",\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\": \"Ingest processing succeeded\",\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\": \"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-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\n+                            \"XML\",\n+                            \"XPath\",\n+                            \"XQuery\",\n+                            \"evaluate\"\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+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60717,107 +62555,167 @@\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-                            \"Database Name\": {\n-                                \"description\": \"Azure Data Explorer Database Name for querying\",\n-                                \"displayName\": \"Database Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Database Name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Argument Delimiter\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Batch Duration\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Query\": {\n-                                \"description\": \"Query to be run against Azure Data Explorer\",\n-                                \"displayName\": \"Query\",\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\": \"Query\",\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+                            \"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\": \"Output MIME type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Redirect Error Stream\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true will redirect any error stream output of the process to the output stream. This is particularly helpful for processes which write extensively to the error stream or for troubleshooting.\",\n+                                \"displayName\": \"Redirect Error Stream\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Redirect Error Stream\",\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\": \"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+                        \"restricted\": true,\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles containing original input associated with a failed Query\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles containing results of a successful Query\",\n+                                \"description\": \"All created 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+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"ADX\",\n-                            \"Azure\",\n-                            \"Data\",\n-                            \"Explorer\",\n-                            \"Kusto\"\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.azure.data.explorer.QueryAzureDataExplorer\",\n-                        \"typeDescription\": \"Query Azure Data Explorer and stream JSON results to output FlowFiles\",\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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Azure Data Explorer query error message on failures\",\n-                                \"name\": \"query.error.message\"\n+                                \"description\": \"Executed command\",\n+                                \"name\": \"command\"\n                             },\n                             {\n-                                \"description\": \"Azure Data Explorer query executed\",\n-                                \"name\": \"query.executed\"\n+                                \"description\": \"Arguments of the command\",\n+                                \"name\": \"command.arguments\"\n                             },\n                             {\n-                                \"description\": \"Content Type set to application/json\",\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -60825,430 +62723,692 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Service Bus Endpoint\": {\n-                                \"allowableValues\": [\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-M4\"\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-                                        \"description\": \"Servicebus endpoint for general use\",\n-                                        \"displayName\": \"Azure\",\n-                                        \"value\": \".servicebus.windows.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"BZIP2\",\n+                                        \"value\": \"BZIP2\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for China\",\n-                                        \"displayName\": \"Azure China\",\n-                                        \"value\": \".servicebus.chinacloudapi.cn\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DEFLATE\",\n+                                        \"value\": \"DEFLATE\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for Germany\",\n-                                        \"displayName\": \"Azure Germany\",\n-                                        \"value\": \".servicebus.cloudapi.de\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SNAPPY\",\n+                                        \"value\": \"SNAPPY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"LZO\",\n+                                        \"value\": \"LZO\"\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\": \"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\": \"Service Bus Endpoint\",\n+                                \"name\": \"compression-format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\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\": \"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\": \"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\": \"Transport Type\",\n+                                \"name\": \"dbf-normalize\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"checkpoint-strategy\": {\n+                            \"dbf-user-logical-types\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use component state to store partition ownership and checkpoint information\",\n-                                        \"displayName\": \"Component State\",\n-                                        \"value\": \"COMPONENT_STATE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"checkpoint-strategy\",\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-                                \"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+                                \"name\": \"dbf-user-logical-types\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-initial-offset\": {\n+                            \"esql-auto-commit\": {\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\": \"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\": \"event-hub-initial-offset\",\n+                                \"name\": \"esql-auto-commit\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-message-receive-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-fetch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-name\": {\n-                                \"description\": \"The name of the event hub to pull messages from.\",\n-                                \"displayName\": \"Event Hub Name\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"esql-max-rows\",\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+                            \"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\": \"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\": \"esql-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-prefetch-count\": {\n-                                \"defaultValue\": \"300\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Prefetch Count\",\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\": \"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\": \"sql-post-query\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"event-hub-shared-access-policy-name\": {\n-                                \"description\": \"The name of the shared access policy. This policy must have Listen claims.\",\n-                                \"displayName\": \"Shared Access Policy Name\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"event-hub-shared-access-policy-name\",\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+                        \"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-                            \"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+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"tags\": [\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ExecuteSQL\",\n+                        \"typeDescription\": \"Executes provided SQL select query. Query result will be converted to Avro format. Streaming is used so arbitrarily large result sets are supported. This processor can be scheduled to run on a timer, or cron expression, using the standard scheduling methods, or it can be triggered by an incoming FlowFile. If it is triggered by an incoming FlowFile, then attributes of that FlowFile will be available when evaluating the select query, and the query may use the ? to escape parameters. In this case, the parameters to use must exist as FlowFile attributes with the naming convention sql.args.N.type and sql.args.N.value, where N is a positive integer. The sql.args.N.type is expected to be a number indicating the JDBC Type. The content of the FlowFile is expected to be in UTF-8 format. FlowFile attribute 'executesql.row.count' indicates how many rows were selected.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Contains the number of rows returned by the query. If 'Max Rows Per Flow File' is set, then this number will reflect the number of rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.row.count\"\n+                            },\n+                            {\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.duration\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the query execution time in milliseconds. This number will reflect the query execution time regardless of the 'Max Rows Per Flow File' setting.\",\n+                                \"name\": \"executesql.query.executiontime\"\n+                            },\n+                            {\n+                                \"description\": \"Duration of the result set fetch time in milliseconds. If 'Max Rows Per Flow File' is set, then this number will reflect only the fetch time for the rows in the Flow File instead of the entire result set.\",\n+                                \"name\": \"executesql.query.fetchtime\"\n+                            },\n+                            {\n+                                \"description\": \"Assuming multiple result sets are returned, the zero based index of this result set.\",\n+                                \"name\": \"executesql.resultset.index\"\n+                            },\n+                            {\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"event-hub-shared-access-policy-primary-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"sql.args.N.type\",\n+                                \"value\": \"SQL type argument to be supplied\"\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n+                            {\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-                                \"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-M4\"\n-                                }\n+                                \"name\": \"sql.args.N.value\",\n+                                \"value\": \"Argument to be supplied\"\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+                            {\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\": \"record-reader\",\n-                                \"required\": false,\n+                                \"name\": \"Database Connection Pooling Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"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\": \"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-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-account-key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"SQL select query\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"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\": \"storage-account-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-container-name\": {\n-                                \"dependencies\": [\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-user-logical-types\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-container-name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"storage-sas-token\": {\n-                                \"dependencies\": [\n+                            \"esql-auto-commit\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"AZURE_BLOB_STORAGE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n-                                        \"propertyName\": \"checkpoint-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"storage-sas-token\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"esql-auto-commit\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\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\": \"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\": \"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\": \"use-managed-identity\",\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-M4\"\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+                        \"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\": 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                             {\n-                                \"description\": \"FlowFiles received from Event Hub.\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"SQL query execution failed. Incoming FlowFile will be penalized and routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"record\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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+                        \"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-M4\",\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+                                \"description\": \"Contains the number of rows returned in the select query\",\n+                                \"name\": \"executesql.row.count\"\n                             },\n                             {\n-                                \"description\": \"The offset into the partition at which the message was stored\",\n-                                \"name\": \"eventhub.offset\"\n+                                \"description\": \"Combined duration of the query execution time and fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.duration\"\n                             },\n                             {\n-                                \"description\": \"The sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n+                                \"description\": \"Duration of the query execution time in milliseconds\",\n+                                \"name\": \"executesql.query.executiontime\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n+                                \"description\": \"Duration of the result set fetch time in milliseconds\",\n+                                \"name\": \"executesql.query.fetchtime\"\n                             },\n                             {\n-                                \"description\": \"The name of the partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\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 application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\n+                                \"description\": \"If processing an incoming flow file causes an Exception, the Flow File is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"executesql.error.message\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then all FlowFiles from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then this is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet. If Output Batch Size is set, then this attribute will not be populated.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If 'Max Rows Per Flow File' is set then the position of this FlowFile in the list of outgoing FlowFiles that were all derived from the same result set FlowFile. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same query result set and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"If the processor has an incoming connection, outgoing FlowFiles will have this attribute set to the value of the input FlowFile's UUID. If there is no incoming connection, the attribute will not be added.\",\n+                                \"name\": \"input.flowfile.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer.\",\n+                                \"name\": \"mime.type\"\n+                            },\n+                            {\n+                                \"description\": \"The number of records output by the Record Writer.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61256,269 +63416,239 @@\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_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\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+                            \"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\": \"Event Hub Consumer Group\",\n+                                \"name\": \"Argument Delimiter\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Message Enqueue Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Command Arguments\",\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-                            \"Event Hub Namespace\": {\n-                                \"description\": \"Namespace of Azure Event Hubs prefixed to Service Bus Endpoint domain\",\n-                                \"displayName\": \"Event Hub Namespace\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Event Hub Namespace\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Command Path\",\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+                            \"Ignore STDIN\": {\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\": \"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\": \"Service Bus Endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"Ignore STDIN\",\n+                                \"required\": false,\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+                            \"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\": \"Shared Access Policy Name\",\n+                                \"name\": \"Max Attribute Length\",\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+                            \"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\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Output Destination Attribute\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n-                                        \"displayName\": \"AMQP\",\n-                                        \"value\": \"Amqp\"\n-                                    },\n-                                    {\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+                            \"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\": \"Transport Type\",\n-                                \"required\": true,\n+                                \"name\": \"Output MIME Type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Working Directory\": {\n+                                \"description\": \"The directory to use as the current working directory when executing the command\",\n+                                \"displayName\": \"Working Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Working Directory\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"use-managed-identity\": {\n+                            \"argumentsStrategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\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\": \"use-managed-identity\",\n-                                \"required\": true,\n+                                \"name\": \"argumentsStrategy\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\"\n-                        ],\n+                        \"restricted\": true,\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+                                \"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\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"eventhub\",\n-                            \"events\",\n-                            \"microsoft\",\n-                            \"streaming\",\n-                            \"streams\"\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.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+                        \"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-M4\",\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+                                \"description\": \"The name of the command executed\",\n+                                \"name\": \"execution.command\"\n                             },\n                             {\n-                                \"description\": \"The Azure sequence number associated with the message\",\n-                                \"name\": \"eventhub.sequence\"\n+                                \"description\": \"The semi-colon delimited list of arguments. Sensitive properties will be masked\",\n+                                \"name\": \"execution.command.args\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub from which the message was pulled\",\n-                                \"name\": \"eventhub.name\"\n+                                \"description\": \"The exit status code returned from executing the command\",\n+                                \"name\": \"execution.status\"\n                             },\n                             {\n-                                \"description\": \"The name of the event hub partition from which the message was pulled\",\n-                                \"name\": \"eventhub.partition\"\n+                                \"description\": \"Any error messages returned from executing the command\",\n+                                \"name\": \"execution.error\"\n                             },\n                             {\n-                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n-                                \"name\": \"eventhub.property.*\"\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61526,230 +63656,190 @@\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-                            \"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\": \"Event Hub Name\",\n-                                \"required\": true,\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+                            \"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\": \"Event Hub Namespace\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Service Bus Endpoint\": {\n+                            \"Destination\": {\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\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     },\n                                     {\n-                                        \"description\": \"Servicebus endpoint for US Government\",\n-                                        \"displayName\": \"Azure US Government\",\n-                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\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\": \"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\": \"Service Bus Endpoint\",\n+                                \"name\": \"Destination\",\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+                            \"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\": \"Shared Access Policy Name\",\n-                                \"required\": false,\n+                                \"name\": \"Grok Expression\",\n+                                \"required\": true,\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+                            \"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\": \"Shared Access Policy Primary Key\",\n+                                \"name\": \"Grok Pattern file\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\",\n+                                        \"URL\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Transport Type\": {\n+                            \"Keep Empty Captures\": {\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\": \"true\",\n+                                \"description\": \"If true, then empty capture values will be included in the returned capture map.\",\n+                                \"displayName\": \"Keep Empty Captures\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transport Type\",\n+                                \"name\": \"Keep Empty Captures\",\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+                            \"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\": \"max-batch-size\",\n+                                \"name\": \"Maximum Buffer Size\",\n                                 \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"partitioning-key-attribute-name\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"AmqpWebSockets\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Transport Type\",\n-                                        \"propertyName\": \"Transport Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n-                            },\n-                            \"use-managed-identity\": {\n+                            \"Named captures only\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Choose whether or not to use the managed identity of Azure VM/VMSS\",\n-                                \"displayName\": \"Use Azure Managed Identity\",\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\": \"use-managed-identity\",\n+                                \"name\": \"Named captures only\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Any FlowFile that could not be sent to the event hub will be transferred to this Relationship.\",\n-                                \"name\": \"failure\"\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 is successfully sent to the event hubs will be transferred to this Relationship.\",\n-                                \"name\": \"success\"\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-                        \"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+                            \"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.azure.eventhub.PutAzureEventHub\",\n-                        \"typeDescription\": \"Send FlowFile contents to Azure Event Hubs\",\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-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"When operating in flowfile-attribute mode, each of the Grok identifier that is matched in the flowfile will be added as an attribute, prefixed with \\\"grok.\\\" For example,if the grok identifier \\\"timestamp\\\" is matched, then the value will be added to an attribute named \\\"grok.timestamp\\\"\",\n+                                \"name\": \"grok.XXX\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -61762,243 +63852,93 @@\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\": \"Source Blob Name\",\n-                                \"required\": true,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Source Container Name\",\n-                                \"required\": true,\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-M4\"\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-                            \"conflict-resolution-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\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-                                    },\n-                                    {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\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+                            \"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\": \"conflict-resolution-strategy\",\n+                                \"name\": \"cache-size\",\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-                            \"create-container\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether 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+                            \"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\": \"create-container\",\n+                                \"name\": \"record-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: HTTP, 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-                                \"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-M4\"\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+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles whose record schemas are successfully extracted will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\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                         \"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+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"xml\"\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.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-M4\",\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-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\n+                                \"description\": \"This attribute provides on failure the error message encountered by the Reader.\",\n+                                \"name\": \"record.error.message\"\n                             },\n                             {\n-                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"This attribute provides the schema extracted from the input FlowFile using the provided RecordReader.\",\n+                                \"name\": \"avro.schema\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62006,145 +63946,374 @@\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-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\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+                            \"Enable Canonical Equivalence\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match only when their full canonical decompositions match.\",\n+                                \"displayName\": \"Enable Canonical Equivalence\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Canonical Equivalence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"delete-snapshots-option\": {\n+                            \"Enable Case-insensitive Matching\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Delete the blob only.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete the blob and its snapshots.\",\n-                                        \"displayName\": \"Include Snapshots\",\n-                                        \"value\": \"INCLUDE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates that two characters match even if they are in a different case.  Can also be specified via the embedded flag (?i).\",\n+                                \"displayName\": \"Enable Case-insensitive Matching\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Case-insensitive Matching\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable DOTALL Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Delete only the blob's snapshots.\",\n-                                        \"displayName\": \"Delete Snapshots Only\",\n-                                        \"value\": \"ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"delete-snapshots-option\",\n+                                \"name\": \"Enable DOTALL 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, 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+                            \"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+                                \"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\": \"proxy-configuration-service\",\n+                                \"name\": \"Enable Literal Parsing of the Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Multiline Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Multiline Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Unicode Predefined Character Classes\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies conformance with the Unicode Technical Standard #18: Unicode Regular Expression Annex C: Compatibility Properties.  Can also be specified via the embedded flag (?U).\",\n+                                \"displayName\": \"Enable Unicode Predefined Character Classes\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unicode Predefined Character Classes\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Enable Unicode-aware Case Folding\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When used with 'Enable Case-insensitive Matching', matches in a manner consistent with the Unicode Standard.  Can also be specified via the embedded flag (?u).\",\n+                                \"displayName\": \"Enable Unicode-aware Case Folding\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unicode-aware Case Folding\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enable Unix Lines Mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"Enable named group support\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"Enable repeating capture group\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, every string matching the capture groups will be extracted. Otherwise, if the Regular Expression matches more than once, only the first match will be extracted.\",\n+                                \"displayName\": \"Enable repeating capture group\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"name\": \"Enable repeating capture group\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n+                            },\n+                            \"Include Capture Group 0\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Indicates that Capture Group 0 should be included as an attribute. Capture Group 0 represents the entirety of the regular expression match, is typically not used, and could have considerable length.\",\n+                                \"displayName\": \"Include Capture Group 0\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Include Capture Group 0\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per FlowFile) in order to apply the regular expressions. FlowFiles larger than the specified maximum will not be fully evaluated.\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Permit Whitespace and Comments in Pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\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\": \"Unsuccessful operations will be transferred to the failure relationship.\",\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-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\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                         \"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-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\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.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.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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62157,153 +64326,125 @@\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\": \"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-M4\"\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+                            \"Cache Entry Identifier\": {\n+                                \"defaultValue\": \"${hash.value}\",\n+                                \"description\": \"A comma-delimited list of FlowFile attributes, or the results of Attribute Expression Language statements, which will be evaluated against a FlowFile in order to determine the value(s) used to identify duplicates; it is these values that are cached. NOTE: Only a single Cache Entry Identifier is allowed unless Put Cache Value In Attribute is specified. Multiple cache lookups are only supported when the destination is a set of attributes (see the documentation for 'Put Cache Value In Attribute' for more details including naming convention.\",\n+                                \"displayName\": \"Cache Entry Identifier\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"Cache Entry Identifier\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"filesystem-object-type\",\n-                                \"required\": true,\n+                                \"name\": \"Character Set\",\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, 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+                            \"Distributed Cache Service\": {\n+                                \"description\": \"The Controller Service that is used to get the cached values.\",\n+                                \"displayName\": \"Distributed Cache Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"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.processors.azure.storage.FetchAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\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\": \"Files that could not be written to Azure storage for some reason are transferred 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\": \"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\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"fetch\",\n+                            \"map\"\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+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62317,254 +64458,489 @@\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+                                        \"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\": \"\\\"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+                                        \"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 an Azure Blob Storage container\",\n+                                \"description\": \"Retrieve all files in a directory of an FTP Server\",\n                                 \"keywords\": [\n-                                    \"azure\",\n-                                    \"blob\",\n-                                    \"storage\",\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-                            \"Client-Side Encryption Key ID\": {\n-                                \"dependencies\": [\n+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\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-                                \"description\": \"Specifies the ID of the key to use for client-side encryption.\",\n-                                \"displayName\": \"Client-Side Encryption Key ID\",\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\": \"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\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Client-Side Encryption disabled\",\n-                                        \"displayName\": \"NONE\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"description\": \"Client-Side Encryption enabled using local key\",\n-                                        \"displayName\": \"LOCAL\",\n-                                        \"value\": \"LOCAL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\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\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n-                                \"dependencies\": [\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\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\": \"Client-Side Encryption Local Key\",\n+                                \"name\": \"Create Directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"defaultValue\": \"${azure.blobname}\",\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"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\": \"blob-name\",\n+                                \"name\": \"Hostname\",\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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"container-name\",\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+                            \"Port\": {\n+                                \"defaultValue\": \"21\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\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, 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+                            \"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\": \"\",\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-configuration-service\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"range-length\",\n+                                \"name\": \"Remote File\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Transfer Mode\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"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+                            \"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\": \"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\": \"range-start\",\n-                                \"required\": false,\n+                                \"name\": \"Username\",\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+                            \"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\": \"storage-credentials-service\",\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+                                    {\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+                            \"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-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.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"ftp\",\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.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+                        \"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-M4\",\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+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"ftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"Type of the blob (either BlockBlob, PageBlob or AppendBlob)\",\n-                                \"name\": \"azure.blobtype\"\n+                                \"description\": \"The port that was used to communicate with the remote FTP server\",\n+                                \"name\": \"ftp.remote.port\"\n                             },\n                             {\n-                                \"description\": \"MIME Type of the content\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"ftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\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\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -62572,865 +64948,883 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"read filesystem\"\n+                            },\n+                            {\n+                                \"explanation\": \"Provides operator the ability to delete any file that NiFi has access to.\",\n+                                \"requiredPermission\": \"write filesystem\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n                         \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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+                                        \"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\": \"\\\"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+                                        \"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\": \"Retrieve all files in an Azure DataLake Storage directory\",\n+                                \"description\": \"Ingest all files from a directory into NiFi\",\n                                 \"keywords\": [\n-                                    \"azure\",\n-                                    \"datalake\",\n-                                    \"adls\",\n-                                    \"state\",\n-                                    \"retrieve\",\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-                                    \"all\",\n-                                    \"stream\"\n+                                    \"filter\"\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+                            \"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                                 \"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-M4\"\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+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${azure.filename}\",\n-                                \"description\": \"The filename\",\n-                                \"displayName\": \"File Name\",\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-name\",\n+                                \"name\": \"File to Fetch\",\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+                            \"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+                                    {\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when file not found\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"number-of-retries\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n-                                \"displayName\": \"Number of Retries\",\n+                            \"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\": \"number-of-retries\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Log level when permission denied\",\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, 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+                            \"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\": \"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-M4\"\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+                                \"name\": \"Move Conflict Strategy\",\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+                            \"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\": \"range-start\",\n+                                \"name\": \"Move Destination Directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"restricted\": true,\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+                            \"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 could not be written to Azure storage for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\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 have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system because the file could not be found will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system due to the user running NiFi not having sufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the file system for any reason other than insufficient permissions or the file not existing will be transferred to this Relationship.\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\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.azure.storage.FetchAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Fetch the specified file from Azure Data Lake Storage\",\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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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+                        \"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+                        \"primaryNodeOnly\": false,\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+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\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-                            \"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+                            \"Completion Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Leave the file as-is\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"None\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Move the file to the directory specified by the <Move Destination Directory> property\",\n+                                        \"displayName\": \"Move File\",\n+                                        \"value\": \"Move File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Deletes the original file from the remote system\",\n+                                        \"displayName\": \"Delete File\",\n+                                        \"value\": \"Delete File\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"None\",\n+                                \"description\": \"Specifies what to do with the original file on the server once it has been pulled into NiFi. If the Completion Strategy fails, a warning will be logged but the data will still be transferred.\",\n+                                \"displayName\": \"Completion Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Age\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Minimum File Size\": {\n-                                \"defaultValue\": \"0 B\",\n-                                \"description\": \"The minimum size that a file must be in order to be pulled\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"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\": \"Minimum File Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"blob-name-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"container-name\": {\n-                                \"description\": \"Name of the Azure storage container. In case of PutAzureBlobStorage processor, container can be created if it does not exist.\",\n-                                \"displayName\": \"Container Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"container-name\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Create Directory\": {\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-                                    }\n-                                ],\n-                                \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"et-initial-listing-target\",\n+                                \"name\": \"Create Directory\",\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+                            \"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\": \"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-M4\"\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+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Disable Directory Listing\": {\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+                                        \"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-                                \"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. Supported proxies: HTTP, 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+                                \"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\": \"proxy-configuration-service\",\n+                                \"name\": \"Disable Directory Listing\",\n                                 \"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-M4\"\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+                            \"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\": \"record-writer\",\n+                                \"name\": \"Host Key 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.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"storage-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Blob Storage Credentials.\",\n-                                \"displayName\": \"Storage Credentials\",\n+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-credentials-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\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-M4\"\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.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\": \"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-                            \"azure\",\n-                            \"blob\",\n-                            \"cloud\",\n-                            \"microsoft\",\n-                            \"storage\"\n-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Language code for the content\",\n-                                \"name\": \"lang\"\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-                            {\n-                                \"description\": \"Timestamp of the blob\",\n-                                \"name\": \"azure.timestamp\"\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-                            {\n-                                \"description\": \"Length of the blob\",\n-                                \"name\": \"azure.length\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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+                            \"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\": \"Maximum File Age\",\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-                            \"Maximum File Size\": {\n-                                \"description\": \"The maximum size that a file can be in order to be pulled\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"Key Exchange Algorithms Allowed\": {\n+                                \"description\": \"A comma-separated list of Key Exchange Algorithms allowed for SFTP connections. Leave unset to allow all. Available options are: curve25519-sha256, curve25519-sha256@libssh.org, diffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group1-sha1, diffie-hellman-group14-sha1, diffie-hellman-group14-sha256, diffie-hellman-group14-sha256@ssh.com, diffie-hellman-group15-sha256, diffie-hellman-group15-sha256@ssh.com, diffie-hellman-group15-sha384@ssh.com, diffie-hellman-group15-sha512, diffie-hellman-group16-sha256, diffie-hellman-group16-sha384@ssh.com, diffie-hellman-group16-sha512, diffie-hellman-group16-sha512@ssh.com, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512, diffie-hellman-group18-sha512@ssh.com, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, ext-info-c\",\n+                                \"displayName\": \"Key Exchange Algorithms Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum File Size\",\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-                            \"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+                            \"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\": \"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\": \"Message Authentication Codes Allowed\",\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+                            \"Move Destination Directory\": {\n+                                \"description\": \"The directory on the remote server to move the original file to once it has been ingested into NiFi. This property is ignored unless the Completion Strategy is set to 'Move File'. The specified directory must already exist on the remote system if 'Create Directory' is disabled, or the rename will fail.\",\n+                                \"displayName\": \"Move Destination Directory\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Minimum File Size\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Move Destination Directory\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\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-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\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+                            \"Port\": {\n+                                \"defaultValue\": \"22\",\n+                                \"description\": \"The port to connect to on the remote host to fetch the data from\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"directory-name\",\n+                                \"name\": \"Port\",\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+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\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\": \"Private Key Passphrase\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"et-state-cache\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Private Key Path\",\n                                 \"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-M4\"\n-                                }\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"et-time-window\": {\n-                                \"defaultValue\": \"3 hours\",\n-                                \"description\": \"Specify how long this processor should track already-listed entities. 'Tracking Entities' strategy can pick any entity whose timestamp is inside the specified time window. For example, if set to '30 minutes', any entity having timestamp in recent 30 minutes will be the listing target when this processor runs. A listed entity is considered 'new/updated' and a FlowFile is emitted if one of following condition meets: 1. does not exist in the already-listed entities, 2. has newer timestamp than the cached entity, 3. has different size than the cached entity. If a cached entity's timestamp becomes older than specified time window, that entity will be removed from the cached already-listed entities. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Time Window\",\n+                            \"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\": \"et-time-window\",\n+                                \"name\": \"Proxy Host\",\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+                            \"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\": \"file-filter\",\n+                                \"name\": \"Proxy Port\",\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+                            \"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 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\": \"filesystem-name\",\n+                                \"name\": \"Remote File\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-temporary-files\": {\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\": \"false\",\n-                                \"description\": \"Whether to include temporary files when listing the contents of configured directory paths.\",\n-                                \"displayName\": \"Include Temporary Files\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"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\": \"include-temporary-files\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Strict Host Key Checking\": {\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+                                        \"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\": \"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\": \"listing-strategy\",\n+                                \"name\": \"Strict Host Key Checking\",\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. Supported proxies: HTTP, 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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Use Compression\",\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+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\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-M4\"\n-                                }\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"recurse-subdirectories\": {\n+                            \"fetchfiletransfer-notfound-loglevel\": {\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\": \"Indicates whether to list files from subdirectories of the directory\",\n-                                \"displayName\": \"Recurse Subdirectories\",\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\": \"recurse-subdirectories\",\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+                                \"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-M4\"\n+                                }\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+                            \"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-                        \"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+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to a communications failure will be transferred to this Relationship.\",\n+                                \"name\": \"comms.failure\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile for which we receive a 'Not Found' message from the remote server will be transferred to this Relationship.\",\n+                                \"name\": \"not.found\"\n+                            },\n+                            {\n+                                \"description\": \"Any FlowFile that could not be fetched from the remote server due to insufficient permissions will be transferred to this Relationship.\",\n+                                \"name\": \"permission.denied\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Lists directory in an Azure Data Lake Storage Gen 2 filesystem\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"description\": \"The hostname or IP address from which the file was pulled\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The name of the Azure Directory\",\n-                                \"name\": \"azure.directory\"\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 Azure File\",\n-                                \"name\": \"azure.filename\"\n+                                \"description\": \"The name of the remote file that was pulled\",\n+                                \"name\": \"sftp.remote.filename\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\n+                                \"description\": \"The filename is updated to point to the filename fo the remote file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The last modification time of the Azure File\",\n-                                \"name\": \"azure.lastModified\"\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 ETag of the Azure File\",\n-                                \"name\": \"azure.etag\"\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63443,201 +65837,149 @@\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+                            \"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\": \"adls-credentials-service\",\n+                                \"name\": \"Attribute Matching 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.ADLSCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"Filter Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"description\": \"Retains only the attributes matching the filter, all other attributes are removed.\",\n+                                        \"displayName\": \"Retain\",\n+                                        \"value\": \"Retain\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"Removes the attributes matching the filter, all other attributes are retained.\",\n+                                        \"displayName\": \"Remove\",\n+                                        \"value\": \"Remove\"\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\": \"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\": \"conflict-resolution-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-                                \"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-                                \"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 where the files will be moved.\",\n-                                \"displayName\": \"Destination Filesystem\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"filesystem-name\",\n+                                \"name\": \"Filter 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, 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-                                \"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-M4\"\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+                            \"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\": \"source-directory-name\",\n+                                \"name\": \"Filtered Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"source-filesystem-name\": {\n-                                \"defaultValue\": \"${azure.filesystem}\",\n-                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n-                                \"displayName\": \"Source Filesystem\",\n+                            \"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\": \"source-filesystem-name\",\n+                                \"name\": \"Filtered Attributes Pattern\",\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\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-                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\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\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\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.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-M4\",\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+                        \"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-                                \"description\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\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-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\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+                        ],\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63650,316 +65992,242 @@\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-                                        \"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+                            \"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\": \"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\": \"flatten-json-character-set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Key Type\": {\n+                            \"flatten-json-pretty-print-json\": {\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\": \"false\",\n+                                \"description\": \"Specifies whether or not resulted json should be pretty printed\",\n+                                \"displayName\": \"Pretty Print JSON\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"name\": \"flatten-json-pretty-print-json\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Client-Side Encryption Local Key\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"LOCAL\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n-                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n-                                    }\n-                                ],\n-                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n-                                \"displayName\": \"Client-Side Encryption Local Key\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Client-Side Encryption Local Key\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Resource Transfer Source\": {\n+                            \"flatten-json-return-type\": {\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\": \"flatten\",\n+                                        \"value\": \"flatten\"\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\": \"unflatten\",\n+                                        \"value\": \"unflatten\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\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\": \"Resource Transfer Source\",\n+                                \"name\": \"flatten-json-return-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"blob-name\": {\n-                                \"description\": \"The full name of the blob\",\n-                                \"displayName\": \"Blob Name\",\n+                            \"flatten-json-separator\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The separator character used for joining keys. Must be a JSON-legal character.\",\n+                                \"displayName\": \"Separator\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"blob-name\",\n-                                \"required\": true,\n+                                \"name\": \"flatten-json-separator\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"flatten-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fail if the blob already exists\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"FAIL_RESOLUTION\"\n+                                        \"description\": \"Flattens every objects into a single level json\",\n+                                        \"displayName\": \"normal\",\n+                                        \"value\": \"normal\"\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\": \"Flattens every objects and keep arrays format\",\n+                                        \"displayName\": \"keep arrays\",\n+                                        \"value\": \"keep arrays\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace blob contents if the blob already exist\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"REPLACE_RESOLUTION\"\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\": \"FAIL_RESOLUTION\",\n-                                \"description\": \"Specifies whether an existing blob will have its contents replaced upon conflict.\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\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\": \"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\": \"flatten-mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"create-container\": {\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\": \"Specifies whether to check if the container exists and to automatically create it if it does not. Permission to list containers is required. If false, this check is not made, but the Put operation will fail if the container does not exist.\",\n-                                \"displayName\": \"Create Container\",\n+                                \"description\": \"If true, reserved characters in keys will be ignored\",\n+                                \"displayName\": \"Ignore Reserved Characters\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"create-container\",\n+                                \"name\": \"ignore-reserved-characters\",\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, 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-                                \"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-M4\"\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-M4\"\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Successfully flattened/unflattened files go to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n-                                \"name\": \"success\"\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\": 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+                            \"flatten\",\n+                            \"json\",\n+                            \"unflatten\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\",\n-                        \"typeDescription\": \"Puts content into a blob on Azure Blob Storage. The processor uses Azure Blob Storage client library v12.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n-                        \"writesAttributes\": [\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"The name of the Azure Blob Storage container\",\n-                                \"name\": \"azure.container\"\n+                                \"description\": \"A clone of the incoming FlowFile will be routed to this relationship, after adding appropriate attributes.\",\n+                                \"name\": \"enrichment\"\n                             },\n                             {\n-                                \"description\": \"The 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+                                \"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+                            \"enrich\",\n+                            \"fork\",\n+                            \"join\",\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-M4\",\n+                        \"writesAttributes\": [\n                             {\n-                                \"description\": \"Error code reported during blob operation\",\n-                                \"name\": \"azure.error.code\"\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\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n-                                \"name\": \"azure.ignored\"\n+                                \"description\": \"The role to use for enrichment. This will either be ORIGINAL or ENRICHMENT.\",\n+                                \"name\": \"enrichment.role\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -63967,456 +66235,328 @@\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-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n-                                    }\n-                                ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Resource Service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"Resource Transfer Source\": {\n+                            \"fork-mode\": {\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\": \"Generated records will be the elements of the array\",\n+                                        \"displayName\": \"Extract\",\n+                                        \"value\": \"extract\"\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\": \"Generated records will preserve the input schema and will contain a one-element array\",\n+                                        \"displayName\": \"Split\",\n+                                        \"value\": \"split\"\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-                            \"adls-credentials-service\": {\n-                                \"description\": \"Controller Service used to obtain Azure Credentials.\",\n-                                \"displayName\": \"ADLS Credentials\",\n+                                \"defaultValue\": \"split\",\n+                                \"description\": \"Specifies the forking mode of the processor\",\n+                                \"displayName\": \"Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"adls-credentials-service\",\n+                                \"name\": \"fork-mode\",\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-M4\"\n-                                }\n-                            },\n-                            \"base-temporary-path\": {\n-                                \"defaultValue\": \"\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"WRITE_AND_RENAME\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Writing Strategy\",\n-                                        \"propertyName\": \"writing-strategy\"\n-                                    }\n-                                ],\n-                                \"description\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n-                                \"displayName\": \"Base Temporary Path\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"base-temporary-path\",\n-                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\n+                            \"include-parent-fields\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"conflict-resolution-strategy\",\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-                                \"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-                                \"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+                                \"name\": \"include-parent-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"writing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n-                                        \"displayName\": \"Write and Rename\",\n-                                        \"value\": \"WRITE_AND_RENAME\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n-                                        \"displayName\": \"Simple Write\",\n-                                        \"value\": \"SIMPLE_WRITE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"WRITE_AND_RENAME\",\n-                                \"description\": \"Defines the approach for writing the Azure file.\",\n-                                \"displayName\": \"Writing Strategy\",\n+                            \"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\": \"writing-strategy\",\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-M4\"\n+                                }\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that could not be written to Azure storage for some reason are transferred to this relationship\",\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\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original FlowFiles will be routed to this relationship\",\n+                                \"name\": \"original\"\n+                            },\n+                            {\n+                                \"description\": \"The FlowFiles containing the forked records will be routed to this relationship\",\n+                                \"name\": \"fork\"\n                             }\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-                            \"adlsgen2\",\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"datalake\",\n-                            \"microsoft\",\n-                            \"storage\"\n+                            \"array\",\n+                            \"content\",\n+                            \"event\",\n+                            \"fork\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile as a file on Azure Data Lake Storage Gen 2\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"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\": \"Primary location for file content\",\n-                                \"name\": \"azure.primaryUri\"\n+                                \"description\": \"The MIME Type indicated by the Record Writer\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The length of the Azure File\",\n-                                \"name\": \"azure.length\"\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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Auto Delete Messages\": {\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\": \"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\": \"true\",\n-                                \"description\": \"Specifies whether the received message is to be automatically deleted from the queue.\",\n-                                \"displayName\": \"Auto Delete Messages\",\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\": \"Auto Delete Messages\",\n+                                \"name\": \"Data Format\",\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-                                \"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-M4\"\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+                            \"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\": \"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+                                \"name\": \"File Size\",\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+                            \"Unique FlowFiles\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"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\": \"Request Timeout\",\n+                                \"name\": \"Unique FlowFiles\",\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+                            \"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\": \"Visibility Timeout\",\n+                                \"name\": \"character-set\",\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, 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+                            \"generate-ff-custom-text\": {\n+                                \"description\": \"If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored. Finally, if Expression Language is used, evaluation will be performed only once per batch of generated FlowFiles\",\n+                                \"displayName\": \"Custom Text\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\n+                                \"name\": \"mime-type\",\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                             {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"\",\n                                 \"name\": \"success\"\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-                            \"azure\",\n-                            \"cloud\",\n-                            \"dequeue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"generate\",\n+                            \"load\",\n+                            \"random\",\n+                            \"test\"\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+                        \"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-M4\",\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+                                \"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-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -64424,1110 +66564,856 @@\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-                            \"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-M4\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue Name\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"null-percentage\",\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+                            \"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\": \"Request Timeout\",\n+                                \"name\": \"nullable-fields\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Visibility Timeout\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"number-of-records\",\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, 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+                            \"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\": \"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-M4\"\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+                                \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"storage-endpoint-suffix\",\n-                                \"required\": true,\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                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All successfully processed FlowFiles are routed to this relationship\",\n+                                \"description\": \"FlowFiles that are successfully created will be routed to this relationship\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"cloud\",\n-                            \"enqueue\",\n-                            \"microsoft\",\n-                            \"queue\",\n-                            \"storage\"\n+                            \"fake\",\n+                            \"generate\",\n+                            \"random\",\n+                            \"test\"\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+                        \"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-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": [\n+                        \"version\": \"2.0.0-M4\",\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-azure-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\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-                            \"Batch Size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many records to send in a single batch, at most.\",\n-                                \"displayName\": \"Batch Size\",\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\": \"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+                                \"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-M4\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance URL\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Max Wait Time\",\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+                            \"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\": \"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\": \"Maximum-value Columns\",\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+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Platform\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"include-null-values\": {\n+                            \"db-fetch-db-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL, for version 2012 or greater\",\n+                                        \"displayName\": \"MS SQL 2012+\",\n+                                        \"value\": \"MS SQL 2012+\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Indicate if null values should be included in records. Default will be false\",\n-                                \"displayName\": \"Include Null Values\",\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\": \"include-null-values\",\n+                                \"name\": \"db-fetch-db-type\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-name-filter\",\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-                            \"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+                            \"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\": \"s2s-prov-task-name-filter-exclude\",\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-                            \"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+                            \"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\": \"s2s-prov-task-type-filter\",\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s2s-prov-task-type-filter-exclude\",\n-                                \"required\": false,\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-                            \"start-position\": {\n+                            \"gen-table-output-flowfile-on-zero-results\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the beginning of the stream (the oldest event first)\",\n-                                        \"displayName\": \"Beginning of Stream\",\n-                                        \"value\": \"beginning-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Start reading provenance Events from the end of the stream, ignoring old events\",\n-                                        \"displayName\": \"End of Stream\",\n-                                        \"value\": \"end-of-stream\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"beginning-of-stream\",\n-                                \"description\": \"If the Reporting Task has never been run, or if its state has been reset by a user, specifies where in the stream of Provenance Events the Reporting Task should start\",\n-                                \"displayName\": \"Start Position\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Depending on the specified properties, an execution of this processor may not result in any SQL statements generated. When this property is true, an empty FlowFile will be generated (having the parent of the incoming FlowFile if present) and transferred to the 'success' relationship. When this property is false, no output FlowFiles will be generated.\",\n+                                \"displayName\": \"Output Empty FlowFile on Zero Results\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"start-position\",\n+                                \"name\": \"gen-table-output-flowfile-on-zero-results\",\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+                        ],\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-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"provenace\",\n-                            \"reporting\"\n+                            \"database\",\n+                            \"fetch\",\n+                            \"generate\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\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-M4\"\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GenerateTableFetch\",\n+                        \"typeDescription\": \"Generates SQL select queries that fetch \\\"pages\\\" of rows from a table. The partition size property, along with the table's row count, determine the size and number of pages and generated FlowFiles. In addition, incremental fetching can be achieved by setting Maximum-Value Columns, which causes the processor to track the columns' maximum values, thus only fetching rows whose columns' values exceed the observed maximums. This processor is intended to be run on the Primary Node only.\\n\\nThis processor can accept incoming connections; the behavior of the processor is different whether incoming connections are provided:\\n  - If no incoming connection(s) are specified, the processor will generate SQL queries on the specified processor schedule. Expression Language is supported for many fields, but no FlowFile attributes are available. However the properties will be evaluated using the 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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the processor has incoming connections, and processing an incoming FlowFile causes a SQL Exception, the FlowFile is routed to failure and this attribute is set to the exception message.\",\n+                                \"name\": \"generatetablefetch.sql.error\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the database table to be queried.\",\n+                                \"name\": \"generatetablefetch.tableName\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used in the query.\",\n+                                \"name\": \"generatetablefetch.columnNames\"\n+                            },\n+                            {\n+                                \"description\": \"Where clause used in the query to get the expected rows.\",\n+                                \"name\": \"generatetablefetch.whereClause\"\n+                            },\n+                            {\n+                                \"description\": \"The comma-separated list of column names used to keep track of data that has been returned since the processor started running.\",\n+                                \"name\": \"generatetablefetch.maxColumnNames\"\n+                            },\n+                            {\n+                                \"description\": \"The number of result rows to be fetched by the SQL statement.\",\n+                                \"name\": \"generatetablefetch.limit\"\n+                            },\n+                            {\n+                                \"description\": \"Offset to be used to retrieve the corresponding partition.\",\n+                                \"name\": \"generatetablefetch.offset\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles generated from the same query result set will have the same value for the fragment.identifier attribute. This can then be used to correlate the results.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"This is the total number of  FlowFiles produced by a single ResultSet. This can be used in conjunction with the fragment.identifier attribute in order to know how many FlowFiles belonged to the same incoming ResultSet.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"This is the position of this FlowFile in the list of outgoing FlowFiles that were all generated from the same execution. This can be used in conjunction with the fragment.identifier attribute to know which FlowFiles originated from the same execution and in what order  FlowFiles were produced\",\n+                                \"name\": \"fragment.index\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-azure-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"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\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application ID\": {\n-                                \"defaultValue\": \"nifi\",\n-                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n-                                \"displayName\": \"Application ID\",\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Application ID\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Instance ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Job Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics Custom Log Name\": {\n-                                \"defaultValue\": \"nifimetrics\",\n-                                \"description\": \"Log Analytics Custom Log Name\",\n-                                \"displayName\": \"Log Analytics Custom Log Name\",\n+                            \"Delete Original\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Determines whether or not the file is deleted from the remote system after it has been successfully transferred\",\n+                                \"displayName\": \"Delete Original\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics Custom Log Name\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Delete Original\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Log Analytics URL Endpoint Format\": {\n-                                \"defaultValue\": \"https://{0}.ods.opinsights.azure.com/api/logs?api-version=2016-04-01\",\n-                                \"description\": \"Log Analytics URL Endpoint Format\",\n-                                \"displayName\": \"Log Analytics URL Endpoint Format\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Log Analytics URL Endpoint Format\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\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+                            \"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\": \"Log Analytics Workspace Id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Log Analytics Workspace Key\": {\n-                                \"description\": \"Azure Log Analytic Worskspace Key\",\n-                                \"displayName\": \"Log Analytics Workspace Key\",\n+                            \"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\": \"Log Analytics Workspace Key\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Password\",\n+                                \"required\": false,\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+                            \"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\": \"Process group ID(s)\",\n+                                \"name\": \"Http Proxy Username\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Send JVM Metrics\": {\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM Metrics in addition to the NiFi-metrics\",\n-                                \"displayName\": \"Send JVM Metrics\",\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\": \"Send JVM Metrics\",\n+                                \"name\": \"Ignore Dotted Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"azure\",\n-                            \"log analytics\",\n-                            \"metrics\",\n-                            \"reporting\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.reporting.azure.loganalytics.AzureLogAnalyticsReportingTask\",\n-                        \"typeDescription\": \"Sends JVM-metrics as well as Apache NiFi-metrics to a Azure Log Analytics workspace.Apache NiFi-metrics can be either configured global or on process-group level.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"key-password\": {\n-                                \"description\": \"Password used for decrypting Private Keys\",\n-                                \"displayName\": \"Key Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"key-password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n                             },\n-                            \"keyring\": {\n-                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n-                                \"displayName\": \"Keyring\",\n+                            \"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\": \"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+                                \"name\": \"Internal Buffer Size\",\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            },\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\": \"keyring\",\n-                                \"required\": false,\n+                                \"name\": \"Max Selects\",\n+                                \"required\": true,\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-                                \"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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                        \"group\": \"org.apache.nifi\",\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+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"api-key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Password\",\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+                            \"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\": \"api-key-id\",\n+                                \"name\": \"Path Filter Regex\",\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+                            \"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\": \"el-cs-charset\",\n+                                \"name\": \"Polling Interval\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-connect-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"el-cs-enable-compression\",\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-                            \"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+                            \"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\": \"el-cs-http-hosts\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-node-selector\": {\n+                            \"Proxy Type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Select any Elasticsearch node to handle requests\",\n-                                        \"displayName\": \"Any\",\n-                                        \"value\": \"ANY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"Skip dedicated Elasticsearch master nodes for handling request\",\n-                                        \"displayName\": \"Skip Dedicated Masters\",\n-                                        \"value\": \"SKIP_DEDICATED_MASTERS\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"ANY\",\n-                                \"description\": \"Selects Elasticsearch nodes that can receive requests. Used to keep requests away from dedicated Elasticsearch master nodes\",\n-                                \"displayName\": \"Node Selector\",\n+                                \"defaultValue\": \"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\": \"el-cs-node-selector\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-cs-password\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"el-cs-path-prefix\": {\n-                                \"description\": \"Sets the path's prefix for every request used by the http client. For example, if this is set to \\\"/my/path\\\", then any client request will become \\\"/my/path/\\\" + endpoint. In essence, every request's endpoint is prefixed by this pathPrefix. The path prefix is useful for when Elasticsearch is behind a proxy that provides a base path or a proxy that requires all paths to start with '/'; it is not intended for other purposes and it should not be supplied in other scenarios\",\n-                                \"displayName\": \"Path Prefix\",\n+                            \"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\": \"el-cs-path-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Remote Poll Batch Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-send-meta-header\": {\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\": \"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+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-send-meta-header\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-cluster-nodes\": {\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\": \"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+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-sniff-cluster-nodes\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-sniff-failure\": {\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-                                \"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+                                \"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\": \"el-cs-sniffer-request-timeout\",\n+                                \"name\": \"Use Natural Ordering\",\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+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-cs-socket-timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\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-M4\"\n-                                }\n-                            },\n-                            \"el-cs-strict-deprecation\": {\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\": \"Whether the REST client should return any response containing at least one warning header as a failure\",\n-                                \"displayName\": \"Strict Deprecation\",\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\": \"el-cs-strict-deprecation\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-cs-suppress-nulls\": {\n+                            \"ftp-use-utf8\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Fields that are missing (present in the schema but not in the record), or that have a value of null/empty, will be written out as a null/empty value\",\n-                                        \"displayName\": \"Never Suppress\",\n-                                        \"value\": \"never-suppress\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"el-cs-suppress-nulls\",\n+                                \"name\": \"ftp-use-utf8\",\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+                                \"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@@ -65535,1055 +67421,929 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutFTP\"\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-M4\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"client\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\"\n+                            \"FTP\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"source\"\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-M4\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the file was last accessed. May not work on all file systems\",\n+                                \"name\": \"file.lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"dynamicProperties\": [\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                                \"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+                                \"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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"el-lookup-index\": {\n-                                \"description\": \"The name of the index to read from\",\n-                                \"displayName\": \"Index\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Batch Size\",\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 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\": \"el-rest-client-service\",\n+                                \"name\": \"File Filter\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Infer from Result\",\n-                                        \"value\": \"infer\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"schema-access-strategy\",\n+                                \"name\": \"Ignore Hidden Files\",\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 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\": \"schema-branch\",\n-                                \"required\": false,\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-                            \"schema-name\": {\n-                                \"defaultValue\": \"${schema.name}\",\n-                                \"dependencies\": [\n+                            \"Keep Source File\": {\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-registry\": {\n-                                \"dependencies\": [\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\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\": \"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, 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\": \"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-M4\"\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+                                \"name\": \"Keep Source File\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"schema-version\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\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-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"elasticsearch\",\n-                            \"enrich\",\n-                            \"lookup\",\n-                            \"record\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"el-lookup-type\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\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+                            \"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\": \"el-rest-client-service\",\n+                                \"name\": \"Minimum File Age\",\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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"sensitive\": false\n                             },\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-distributed-cache-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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-                            \"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+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"Path 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.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Server Hostname\": {\n-                                \"description\": \"The name of the server that is running the DistributedMapCacheServer service\",\n-                                \"displayName\": \"Server Hostname\",\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\": \"Server Hostname\",\n+                                \"name\": \"Polling Interval\",\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+                            \"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\": \"Server Port\",\n+                                \"name\": \"Recurse Subdirectories\",\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-M4\"\n-                            },\n+                        \"restricted\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.PutFile\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"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-M4\"\n+                                \"description\": \"All files are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n-                            \"org.apache.nifi.ssl.StandardSSLContextService\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cache\",\n-                            \"cluster\",\n-                            \"distributed\",\n-                            \"map\",\n-                            \"state\"\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"ingress\",\n+                            \"input\",\n+                            \"local\",\n+                            \"source\"\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-M4\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"Specifies how long to wait when communicating with the remote server before determining that there is a communications failure if data cannot be sent or received\",\n-                                \"displayName\": \"Communications Timeout\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"If specified, indicates the SSL Context Service that is used to communicate with the remote server. If not specified, communications will not be encrypted\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"Ciphers Allowed\": {\n+                                \"description\": \"A comma-separated list of Ciphers allowed for SFTP connections. Leave unset to allow all. Available options are: 3des-cbc, 3des-ctr, aes128-cbc, aes128-ctr, aes128-gcm@openssh.com, aes192-cbc, aes192-ctr, aes256-cbc, aes256-ctr, aes256-gcm@openssh.com, arcfour, arcfour128, arcfour256, blowfish-cbc, blowfish-ctr, cast128-cbc, cast128-ctr, chacha20-poly1305@openssh.com, idea-cbc, idea-ctr, serpent128-cbc, serpent128-ctr, serpent192-cbc, serpent192-ctr, serpent256-cbc, serpent256-ctr, twofish-cbc, twofish128-cbc, twofish128-ctr, twofish192-cbc, twofish192-ctr, twofish256-cbc, twofish256-ctr\",\n+                                \"displayName\": \"Ciphers Allowed\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\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-                                \"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-M4\"\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+                            \"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\": \"Server Hostname\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Server Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port on the remote server that is to be used when communicating with the DistributedSetCacheServer service\",\n-                                \"displayName\": \"Server Port\",\n+                            \"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\": \"Server Port\",\n+                                \"name\": \"Data 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.distributed.cache.client.DistributedSetCacheClient\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Delete Original\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"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\": \"Eviction Strategy\",\n+                                \"name\": \"Delete Original\",\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+                            \"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\": \"Maximum Cache Entries\",\n-                                \"required\": true,\n+                                \"name\": \"File Filter Regex\",\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+                            \"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\": \"Persistence Directory\",\n+                                \"name\": \"Host Key File\",\n                                 \"required\": false,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"4557\",\n-                                \"description\": \"The port to listen on for incoming connections\",\n-                                \"displayName\": \"Port\",\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\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Hostname\",\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+                            \"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\": \"SSL Context Service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": true\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+                            \"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\": \"maximum-read-size\",\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-                        },\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-distributed-cache-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Eviction Strategy\": {\n+                            },\n+                            \"Ignore Dotted Files\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Least Frequently Used\",\n-                                        \"value\": \"Least Frequently Used\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Least Recently Used\",\n-                                        \"value\": \"Least Recently Used\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"First In, First Out\",\n-                                        \"value\": \"First In, First Out\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Least Frequently Used\",\n-                                \"description\": \"Determines which strategy should be used to evict values from the cache to make room for new entries\",\n-                                \"displayName\": \"Eviction Strategy\",\n+                                \"defaultValue\": \"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\": \"Eviction Strategy\",\n+                                \"name\": \"Ignore Dotted Files\",\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Maximum Cache Entries\",\n+                                \"name\": \"Max Selects\",\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+                            \"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\": \"Persistence Directory\",\n+                                \"name\": \"Path Filter Regex\",\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+                            \"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\": \"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-                            \"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+                            \"Private Key Passphrase\": {\n+                                \"description\": \"Password for the private key\",\n+                                \"displayName\": \"Private Key Passphrase\",\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\": \"Private Key Passphrase\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": true\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+                            \"Private Key Path\": {\n+                                \"description\": \"The fully qualified path to the Private Key file\",\n+                                \"displayName\": \"Private Key Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"maximum-read-size\",\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-                        },\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-ldap-iaa-providers-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-oauth2-provider-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-oauth2-provider-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"HTTP Protocols\": {\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\": \"HTTP/1.1\",\n-                                        \"displayName\": \"http/1.1\",\n-                                        \"value\": \"HTTP_1_1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\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\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n                                     },\n                                     {\n-                                        \"description\": \"HTTP/2\",\n-                                        \"displayName\": \"h2\",\n-                                        \"value\": \"H2\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"H2_HTTP_1_1\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"SSL Context Service\",\n-                                        \"propertyName\": \"ssl-context-service\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n-                                \"displayName\": \"HTTP Protocols\",\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\": \"HTTP Protocols\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\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+                            \"Remote Path\": {\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"audience\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Remote Path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"authorization-server-url\": {\n-                                \"description\": \"The URL of the authorization server that issues access tokens.\",\n-                                \"displayName\": \"Authorization Server URL\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"authorization-server-url\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Remote Poll Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"client-authentication-strategy\": {\n+                            \"Search Recursively\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send client authentication in request body. RFC 6749 Section 2.3.1 recommends Basic Authentication instead of request body.\",\n-                                        \"displayName\": \"REQUEST_BODY\",\n-                                        \"value\": \"REQUEST_BODY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Send client authentication using HTTP Basic authentication.\",\n-                                        \"displayName\": \"BASIC_AUTHENTICATION\",\n-                                        \"value\": \"BASIC_AUTHENTICATION\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"false\",\n+                                \"description\": \"If true, will pull files from arbitrarily nested subdirectories; otherwise, will not traverse subdirectories\",\n+                                \"displayName\": \"Search Recursively\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"client-authentication-strategy\",\n+                                \"name\": \"Search Recursively\",\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-                            \"client-secret\": {\n-                                \"dependencies\": [\n+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Client ID\",\n-                                        \"propertyName\": \"client-id\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"\",\n-                                \"displayName\": \"Client secret\",\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\": \"client-secret\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n                                 \"required\": true,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"grant-type\": {\n+                            \"Strict Host Key Checking\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Refresh Token Grant. Used to get fresh access tokens based on a previously acquired refresh token. Requires Client ID and Client Secret (apart from Refresh Token).\",\n-                                        \"displayName\": \"Refresh Token\",\n-                                        \"value\": \"refresh_token\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"grant-type\",\n+                                \"name\": \"Strict Host Key Checking\",\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-M4\"\n-                                }\n-                            },\n-                            \"refresh-token\": {\n-                                \"dependencies\": [\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"refresh_token\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"refresh-window\",\n+                                \"name\": \"Use Compression\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"resource\": {\n-                                \"description\": \"Resource URI for the access token request defined in RFC 8707 Section 2\",\n-                                \"displayName\": \"Resource\",\n+                            \"Use Natural Ordering\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull files in the order in which they are naturally listed; otherwise, the order in which the files will be pulled is not defined\",\n+                                \"displayName\": \"Use Natural Ordering\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"resource\",\n-                                \"required\": false,\n+                                \"name\": \"Use Natural Ordering\",\n+                                \"required\": true,\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+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"scope\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Username\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"service-password\": {\n-                                \"dependencies\": [\n+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"password\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Grant Type\",\n-                                        \"propertyName\": \"grant-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Password for the username on the service that is being accessed.\",\n-                                \"displayName\": \"Password\",\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\": \"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+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\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. 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\": \"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-M4\"\n                                 }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\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-M4\"\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-                            \"access token\",\n-                            \"authorization\",\n-                            \"http\",\n-                            \"oauth2\",\n-                            \"provider\"\n+                            \"fetch\",\n+                            \"files\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"input\",\n+                            \"remote\",\n+                            \"retrieve\",\n+                            \"sftp\",\n+                            \"source\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jolt-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.GetSFTP\",\n+                        \"typeDescription\": \"Fetches files from an SFTP Server and creates FlowFiles from them\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The filename is set to the name of the file on the remote server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The path is set to the path of the file's directory on the remote server. For example, if the <Remote Path> property is set to /tmp, files picked up from /tmp will have the path attribute set to /tmp. If the <Search Recursively> property is set to true and a file is picked up from /tmp/abc/1/2/3, then the path attribute will be set to /tmp/abc/1/2/3\",\n+                                \"name\": \"path\"\n+                            },\n+                            {\n+                                \"description\": \"The date and time that the source file was last modified\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The full/absolute path from where a file was picked up. The current 'path' attribute is still populated, but may be a relative path\",\n+                                \"name\": \"absolute.path\"\n+                            }\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-jolt-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -66592,607 +68352,512 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Custom Module Directory\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Additional HTTP Methods\",\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+                            \"Allow DELETE\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\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 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\": \"Custom Transformation Class Name\",\n-                                \"required\": false,\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP DELETE Method\",\n+                                \"displayName\": \"Allow DELETE\",\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-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allow DELETE\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Transform\": {\n+                            \"Allow GET\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP GET Method\",\n+                                \"displayName\": \"Allow GET\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Jolt Transform\",\n+                                \"name\": \"Allow GET\",\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+                            \"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\": \"Max String Length\",\n+                                \"name\": \"Allow HEAD\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Pretty Print\": {\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\": \"Apply pretty print formatting to the output of the Jolt transform\",\n-                                \"displayName\": \"Pretty Print\",\n+                                \"description\": \"Allow HTTP OPTIONS Method\",\n+                                \"displayName\": \"Allow OPTIONS\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Pretty Print\",\n+                                \"name\": \"Allow OPTIONS\",\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+                            \"Allow POST\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP POST Method\",\n+                                \"displayName\": \"Allow POST\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transform Cache Size\",\n+                                \"name\": \"Allow POST\",\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), 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\": 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-                        ],\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Always set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-jolt-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"Allow PUT\": {\n+                                \"allowableValues\": [\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"jolt-transform-custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Jolt Transform\",\n-                                        \"propertyName\": \"Jolt Transform\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Fully Qualified Class Name for Custom Transformation\",\n-                                \"displayName\": \"Custom Transformation Class Name\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Allow HTTP PUT Method\",\n+                                \"displayName\": \"Allow PUT\",\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\": \"Allow PUT\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Jolt Specification\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Allowed Paths\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"TEXT\",\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"Jolt Transform\": {\n+                            \"Client Authentication\": {\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+                                        \"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\": \"Always overwrite value\",\n-                                        \"displayName\": \"Modify - Overwrite\",\n-                                        \"value\": \"jolt-transform-modify-overwrite\"\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\": \"Writes when key is missing\",\n-                                        \"displayName\": \"Modify - Define\",\n-                                        \"value\": \"jolt-transform-modify-define\"\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\": \"jolt-transform-chain\",\n-                                \"description\": \"Specifies the Jolt Transformation that should be used with the provided specification.\",\n-                                \"displayName\": \"Jolt Transform\",\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\": \"Jolt Transform\",\n+                                \"name\": \"Client Authentication\",\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+                            \"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\": \"Transform Cache Size\",\n+                                \"name\": \"Default URL Character Set\",\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+                            \"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\": \"jolt-record-record-reader\",\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.RecordReaderFactory\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"jolt-record-record-writer\": {\n-                                \"description\": \"Specifies the Controller Service to use for writing out the records\",\n-                                \"displayName\": \"Record Writer\",\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"jolt-record-record-writer\",\n+                                \"name\": \"HTTP Protocols\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Hostname\": {\n+                                \"description\": \"The Hostname to bind to. If not specified, will bind to all hosts\",\n+                                \"displayName\": \"Hostname\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Hostname\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Listening Port\": {\n+                                \"defaultValue\": \"80\",\n+                                \"description\": \"The Port to listen on for incoming HTTP requests\",\n+                                \"displayName\": \"Listening Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Listening Port\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Threads\": {\n+                                \"defaultValue\": \"200\",\n+                                \"description\": \"The maximum number of threads that the embedded HTTP server will use for handling requests.\",\n+                                \"displayName\": \"Maximum Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Threads\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server will accept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"container-queue-size\": {\n+                                \"defaultValue\": \"50\",\n+                                \"description\": \"The size of the queue for Http Request Containers\",\n+                                \"displayName\": \"Container Queue Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"container-queue-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-read-buffer-size\": {\n+                                \"defaultValue\": \"512 KB\",\n+                                \"description\": \"The threshold size, at which the contents of an incoming file would be written to disk. Only applies for requests with Content-Type: multipart/form-data. It is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space.\",\n+                                \"displayName\": \"Multipart Read Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-read-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"multipart-request-max-size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"The max size of the request. Only applies for requests with Content-Type: multipart/form-data, and is used to prevent denial of service type of attacks, to prevent filling up the heap or disk space\",\n+                                \"displayName\": \"Multipart Request Max Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"multipart-request-max-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"parameters-to-attributes\": {\n+                                \"description\": \"A comma-separated list of HTTP parameters or form data to output as attributes\",\n+                                \"displayName\": \"Parameters to Attributes List\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"parameters-to-attributes\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.HandleHttpResponse\"\n+                        ],\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"description\": \"All content that is received is routed to the 'success' relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile records cannot be parsed), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was transformed. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n                             }\n                         ],\n                         \"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+                            \"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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The number of records in an outgoing FlowFile\",\n-                                \"name\": \"record.count\"\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 that the configured Record Writer indicates is appropriate\",\n+                                \"description\": \"The MIME Type of the data, according to the HTTP Header \\\"Content-Type\\\"\",\n                                 \"name\": \"mime.type\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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-                            \"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-M4\"\n-                                }\n+                            {\n+                                \"description\": \"The part of the request URL that is considered the Servlet Path\",\n+                                \"name\": \"http.servlet.path\"\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-M4\"\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-                        \"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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-server-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kafka-service-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-pgp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67200,129 +68865,131 @@\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-                            \"decryption-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Produce decrypted content read from literal data ignoring signatures\",\n-                                        \"displayName\": \"DECRYPTED\",\n-                                        \"value\": \"DECRYPTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Produce decrypted content packaged as an OpenPGP message for additional processing\",\n-                                        \"displayName\": \"PACKAGED\",\n-                                        \"value\": \"PACKAGED\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"DECRYPTED\",\n-                                \"description\": \"Strategy for writing files to success after decryption\",\n-                                \"displayName\": \"Decryption Strategy\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"decryption-strategy\",\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+                            \"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\": \"passphrase\",\n+                                \"name\": \"Attributes to add to the HTTP Response (Regex)\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"private-key-service\": {\n-                                \"description\": \"PGP Private Key Service for decrypting data encrypted with Public Key Encryption\",\n-                                \"displayName\": \"Private Key Service\",\n+                            \"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\": \"private-key-service\",\n-                                \"required\": false,\n+                                \"name\": \"HTTP Context Map\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n+                                    \"type\": \"org.apache.nifi.http.HttpContextMap\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP Status Code\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"The value of this attribute is used to lookup the HTTP Response so that the proper message can be sent back to the requestor. If this attribute is missing, the FlowFile will be routed to 'failure.'\",\n+                                \"name\": \"http.context.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Value of the URI requested by the client. Used for provenance event.\",\n+                                \"name\": \"http.request.uri\"\n+                            },\n+                            {\n+                                \"description\": \"IP address of the client. Used for provenance event.\",\n+                                \"name\": \"http.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"IP address/hostname of the server. Used for provenance event.\",\n+                                \"name\": \"http.local.name\"\n+                            },\n+                            {\n+                                \"description\": \"Listening port of the server. Used for provenance event.\",\n+                                \"name\": \"http.server.port\"\n+                            },\n+                            {\n+                                \"description\": \"SSL distinguished name (if any). Used for provenance event.\",\n+                                \"name\": \"http.subject.dn\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n+                            \"org.apache.nifi.http.StandardHttpContextMap\",\n+                            \"org.apache.nifi.processors.standard.HandleHttpRequest\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Decryption Succeeded\",\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\": \"Decryption Failed\",\n+                                \"description\": \"FlowFiles will be routed to this Relationship if the Processor is unable to respond to the requestor. This may happen, for instance, if the connection times out or if NiFi is restarted before responding to the HTTP Request.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\"\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.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.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-M4\",\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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67335,382 +69002,156 @@\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+                            \"config-body\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\n                                     }\n                                 ],\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\": \"file-encoding\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"passphrase\": {\n-                                \"description\": \"Passphrase used for encrypting data with Password-Based Encryption\",\n-                                \"displayName\": \"Passphrase\",\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\": \"passphrase\",\n+                                \"name\": \"config-body\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"public-key-search\": {\n+                            \"config-file\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Public Key Service\",\n-                                        \"propertyName\": \"public-key-service\"\n+                                        \"dependentValues\": [\n+                                            \"Replace\",\n+                                            \"Merge\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Config Strategy\",\n+                                        \"propertyName\": \"config-strategy\"\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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"public-key-search\",\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-                            \"public-key-service\": {\n-                                \"description\": \"PGP Public Key Service for encrypting data with Public Key Encryption\",\n-                                \"displayName\": \"Public Key Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"symmetric-key-algorithm\": {\n+                            \"config-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_128\",\n-                                        \"value\": \"AES_128\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_192\",\n-                                        \"value\": \"AES_192\"\n+                                        \"description\": \"Use default NiFi MIME Types.\",\n+                                        \"displayName\": \"Preset\",\n+                                        \"value\": \"Preset\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES_256\",\n-                                        \"value\": \"AES_256\"\n-                                    }\n-                                ],\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\": \"symmetric-key-algorithm\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.SignContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Encryption Succeeded\",\n-                                \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Encryption 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.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-M4\",\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\": false,\n-                        \"artifact\": \"nifi-pgp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                                        \"description\": \"Use config MIME Types only.\",\n+                                        \"displayName\": \"Replace\",\n+                                        \"value\": \"Replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BINARY\",\n-                                        \"value\": \"BINARY\"\n+                                        \"description\": \"Use config together with default NiFi MIME Types.\",\n+                                        \"displayName\": \"Merge\",\n+                                        \"value\": \"Merge\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"BINARY\",\n-                                \"description\": \"File Encoding for signing\",\n-                                \"displayName\": \"File Encoding\",\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\": \"file-encoding\",\n+                                \"name\": \"config-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"hash-algorithm\": {\n+                            \"use-filename-in-detection\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA256\",\n-                                        \"value\": \"SHA256\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA384\",\n-                                        \"value\": \"SHA384\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SHA512\",\n-                                        \"value\": \"SHA512\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"SHA512\",\n-                                \"description\": \"Hash Algorithm for signing\",\n-                                \"displayName\": \"Hash Algorithm\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"hash-algorithm\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"private-key-id\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"private-key-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPrivateKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"SIGNED\",\n-                                \"description\": \"Strategy for writing files to success after signing\",\n-                                \"displayName\": \"Signing Strategy\",\n+                                \"defaultValue\": \"true\",\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\": \"signing-strategy\",\n+                                \"name\": \"use-filename-in-detection\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.pgp.DecryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.EncryptContentPGP\",\n-                            \"org.apache.nifi.processors.pgp.VerifyContentPGP\"\n-                        ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Content signing succeeded\",\n+                                \"description\": \"All FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Content signing failed\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Encryption\",\n-                            \"GPG\",\n-                            \"OpenPGP\",\n-                            \"PGP\",\n-                            \"RFC 4880\",\n-                            \"Signing\"\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.pgp.SignContentPGP\",\n-                        \"typeDescription\": \"Sign content using OpenPGP Private Keys\",\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-M4\",\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+                                \"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\": \"Signature Type Identifier\",\n-                                \"name\": \"pgp.signature.type.id\"\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\": \"Signature Version Number\",\n-                                \"name\": \"pgp.signature.version\"\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-pgp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -67718,2545 +69159,1855 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"public-key-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-pgp-service-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.pgp.service.api.PGPPublicKeyService\",\n-                                    \"version\": \"2.0.0-M4\"\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+                        \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Signature Verification Succeeded\",\n-                                \"name\": \"success\"\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\": \"Signature Verification Failed\",\n-                                \"name\": \"failure\"\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-                        \"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-                        ],\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-M4\",\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-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-asana-processors-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-asana-processors-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"inputRequirement\": \"INPUT_ALLOWED\",\n                         \"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+                            \"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\": \"asana-controller-service\",\n+                                \"name\": \"Connection Timeout\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"asana-object-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Collect tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"asana-collect-tasks\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect attached files of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Task Attachments\",\n-                                        \"value\": \"asana-collect-task-attachments\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect projects of the workspace.\",\n-                                        \"displayName\": \"Projects\",\n-                                        \"value\": \"asana-collect-projects\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect tags of the workspace.\",\n-                                        \"displayName\": \"Tags\",\n-                                        \"value\": \"asana-collect-tags\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the workspace.\",\n-                                        \"displayName\": \"Users\",\n-                                        \"value\": \"asana-collect-users\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified project.\",\n-                                        \"displayName\": \"Members of a Project\",\n-                                        \"value\": \"asana-collect-project-members\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect teams of the workspace.\",\n-                                        \"displayName\": \"Teams\",\n-                                        \"value\": \"asana-collect-teams\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect users assigned to the specified team.\",\n-                                        \"displayName\": \"Team Members\",\n-                                        \"value\": \"asana-collect-team-members\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect stories (comments) of of tasks matching to the specified conditions.\",\n-                                        \"displayName\": \"Stories of Tasks\",\n-                                        \"value\": \"asana-collect-stories\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect status updates of the specified project.\",\n-                                        \"displayName\": \"Status Updates of a Project\",\n-                                        \"value\": \"asana-collect-project-status-updates\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect attached files of project status updates.\",\n-                                        \"displayName\": \"Attachments of Status Updates\",\n-                                        \"value\": \"asana-collect-project-status-attachments\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Collect various events happening on the specified project and on its' tasks.\",\n-                                        \"displayName\": \"Events of a Project\",\n-                                        \"value\": \"asana-collect-project-events\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"asana-collect-tasks\",\n-                                \"description\": \"Specify what kind of objects to be collected from Asana\",\n-                                \"displayName\": \"Object Type\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-object-type\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP Method\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-output-batch-size\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"HTTP URL\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-project-name\": {\n-                                \"dependencies\": [\n+                            \"HTTP/2 Disabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"asana-collect-project-members\",\n-                                            \"asana-collect-project-status-attachments\",\n-                                            \"asana-collect-project-status-updates\",\n-                                            \"asana-collect-task-attachments\",\n-                                            \"asana-collect-stories\",\n-                                            \"asana-collect-tasks\",\n-                                            \"asana-collect-project-events\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Fetch only objects in this project. Case sensitive.\",\n-                                \"displayName\": \"Project Name\",\n+                                \"defaultValue\": \"False\",\n+                                \"description\": \"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\": \"asana-project-name\",\n+                                \"name\": \"HTTP/2 Disabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"asana-section-name\": {\n-                                \"dependencies\": [\n+                            \"Request Body Enabled\": {\n+                                \"allowableValues\": [\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"true\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"asana-collect-team-members\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Object Type\",\n-                                        \"propertyName\": \"asana-object-type\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"description\": \"Team name. Case sensitive.\",\n-                                \"displayName\": \"Team\",\n+                                \"description\": \"Enable sending HTTP request body for PATCH, POST, or PUT methods.\",\n+                                \"displayName\": \"Request Body Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"asana-team-name\",\n+                                \"name\": \"Request Body Enabled\",\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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"Newly collected objects are routed to this relationship.\",\n-                                \"name\": \"new\"\n-                            },\n-                            {\n-                                \"description\": \"Objects that have already been collected earlier, but were updated since, are routed to this relationship.\",\n-                                \"name\": \"updated\"\n-                            },\n-                            {\n-                                \"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-                        \"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-                        ],\n-                        \"triggerSerially\": true,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.asana.GetAsanaObject\",\n-                        \"typeDescription\": \"This processor collects data from Asana\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Global ID of the object in Asana.\",\n-                                \"name\": \"asana.gid\"\n-                            }\n-                        ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-evtx-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-evtx-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"Request Chunked Transfer-Encoding Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Chunk\",\n-                                        \"value\": \"Chunk\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"File\",\n-                                        \"value\": \"File\"\n+                                        \"dependentValues\": [\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Chunk\",\n-                                \"description\": \"Output flow file for each Record, Chunk, or File encountered in the event log\",\n-                                \"displayName\": \"Granularity\",\n+                                \"description\": \"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\": \"granularity\",\n+                                \"name\": \"Request Chunked Transfer-Encoding Enabled\",\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-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-lookup-services-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"CSV Format\": {\n+                            \"Request Content-Encoding\": {\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\": \"Content encoding not applied during transmission\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n                                     },\n                                     {\n-                                        \"description\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"default\",\n-                                \"description\": \"Specifies which \\\"format\\\" the CSV data is in, or specifies if custom formatting should be used.\",\n-                                \"displayName\": \"CSV Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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+                                        \"description\": \"Gzip content encoding and HTTP Content-Encoding header applied during transmission\",\n+                                        \"displayName\": \"GZIP\",\n+                                        \"value\": \"GZIP\"\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\": \"DISABLED\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Escape Character\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Content-Encoding\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"Request Content-Type\": {\n+                                \"defaultValue\": \"${mime.type}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"POST\",\n+                                            \"PATCH\",\n+                                            \"PUT\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"HTTP Method\",\n+                                        \"propertyName\": \"HTTP Method\"\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\": \"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\": \"Quote Character\",\n+                                \"name\": \"Request Content-Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Mode\": {\n+                            \"Request Date Header Enabled\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"All values will be quoted using the configured quote character.\",\n-                                        \"displayName\": \"Quote All Values\",\n-                                        \"value\": \"ALL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted only if they are contain special characters such as newline characters or field separators.\",\n-                                        \"displayName\": \"Quote Minimal\",\n-                                        \"value\": \"MINIMAL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n                                     },\n                                     {\n-                                        \"description\": \"Values will not be quoted. Instead, all special characters will be escaped using the configured escape character.\",\n-                                        \"displayName\": \"Do Not Quote Values\",\n-                                        \"value\": \"NONE\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n+                                \"defaultValue\": \"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\": \"Quote Mode\",\n+                                \"name\": \"Request Date Header Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Trim Fields\": {\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\": \"true\",\n+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Request Username\",\n+                                        \"propertyName\": \"Request Username\"\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\": \"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\": \"Trim Fields\",\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-                                \"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+                                \"name\": \"Request Digest Authentication Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ignore-duplicates\": {\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\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\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\": \"ignore-duplicates\",\n-                                \"required\": true,\n+                                \"name\": \"Request Failure Penalization Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-key-column\": {\n-                                \"description\": \"The field in the CSV file that will serve as the lookup key. This is the field that will be matched against the property specified in the lookup processor.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Request Header Attributes Pattern\",\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-M4\"\n                             },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"character-encoding\": {\n+                            \"Request Multipart Form-Data Filename Enabled\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UTF-16BE\",\n-                                        \"value\": \"UTF-16BE\"\n-                                    },\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US-ASCII\",\n-                                        \"value\": \"US-ASCII\"\n+                                        \"propertyDisplayName\": \"Request Multipart Form-Data Name\",\n+                                        \"propertyName\": \"Request Multipart Form-Data Name\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies a character encoding to use.\",\n-                                \"displayName\": \"Character Encoding\",\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\": \"character-encoding\",\n-                                \"required\": true,\n+                                \"name\": \"Request Multipart Form-Data Filename Enabled\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"distributed-map-cache-service\": {\n-                                \"description\": \"The Controller Service that is used to get the cached values.\",\n-                                \"displayName\": \"Distributed Cache Service\",\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Request Multipart Form-Data Name\",\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\": \"distributed-map-cache-service\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"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+                                \"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-                        },\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-M4\"\n                             },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"Request Username\",\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+                                \"dynamic\": false,\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+                                \"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\": \"proxy-configuration-service\",\n+                                \"name\": \"Response Body Attribute 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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-authentication-strategy\": {\n+                            \"Response Body Ignored\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Authentication\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Basic Authentication\",\n-                                        \"displayName\": \"Basic\",\n-                                        \"value\": \"BASIC\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Disable writing HTTP response FlowFiles to Response relationship\",\n+                                \"displayName\": \"Response Body Ignored\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Body Ignored\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Cache Enabled\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"OAuth2 Authentication\",\n-                                        \"displayName\": \"OAuth2\",\n-                                        \"value\": \"OAUTH2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"NONE\",\n-                                \"description\": \"Authentication strategy to use with REST service.\",\n-                                \"displayName\": \"Authentication Strategy\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enable HTTP response caching described in RFC 7234. Caching responses considers ETag and other headers.\",\n+                                \"displayName\": \"Response Cache Enabled\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-authentication-strategy\",\n+                                \"name\": \"Response Cache Enabled\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-password\": {\n+                            \"Response Cache Size\": {\n+                                \"defaultValue\": \"10MB\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"BASIC\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"propertyDisplayName\": \"Response Cache Enabled\",\n+                                        \"propertyName\": \"Response Cache Enabled\"\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\": \"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\": \"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+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Cache Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"rest-lookup-basic-auth-username\": {\n-                                \"dependencies\": [\n+                            \"Response Cookie Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DISABLED\",\n+                                        \"value\": \"DISABLED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ACCEPT_ALL\",\n+                                        \"value\": \"ACCEPT_ALL\"\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+                                \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-basic-auth-username\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Response Cookie Strategy\",\n+                                \"required\": true,\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+                            \"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\": \"rest-lookup-connection-timeout\",\n+                                \"name\": \"Response FlowFile Naming Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-digest-auth\": {\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-                                \"dependencies\": [\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\": \"Response Generation Required\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Response Header Request Attributes Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"BASIC\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"rest-lookup-digest-auth\",\n+                                \"name\": \"Response Header Request Attributes Enabled\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"rest-lookup-oauth2-access-token-provider\": {\n-                                \"dependencies\": [\n+                            \"Response Redirects Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"OAUTH2\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Authentication Strategy\",\n-                                        \"propertyName\": \"rest-lookup-authentication-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"True\",\n+                                        \"value\": \"True\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"False\",\n+                                        \"value\": \"False\"\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+                                \"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\": \"rest-lookup-oauth2-access-token-provider\",\n+                                \"name\": \"Response Redirects Enabled\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service provides trusted certificates and client certificates for TLS communication.\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"rest-lookup-read-timeout\",\n+                                \"name\": \"Socket Idle Connections\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"rest-lookup-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Socket Idle Timeout\",\n+                                \"required\": true,\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+                            \"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\": \"rest-lookup-record-reader\",\n+                                \"name\": \"Socket Read 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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\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+                            \"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\": \"rest-lookup-response-handling-strategy\",\n+                                \"name\": \"Socket Write Timeout\",\n                                 \"required\": true,\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-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: 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\": \"rest-lookup-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-M4\"\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-                        \"providedApiImplementations\": [\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-M4\"\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"Original\"\n                             },\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-M4\"\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n+                                \"name\": \"Failure\"\n+                            },\n+                            {\n+                                \"description\": \"Request FlowFiles transferred when receiving HTTP responses with a status code between 500 and 599.\",\n+                                \"name\": \"Retry\"\n+                            },\n+                            {\n+                                \"description\": \"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 400 an 499.\",\n+                                \"name\": \"No Retry\"\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+                            \"client\",\n                             \"http\",\n-                            \"json\",\n-                            \"lookup\",\n-                            \"rest\",\n-                            \"xml\"\n+                            \"https\",\n+                            \"rest\"\n                         ],\n-                        \"type\": \"org.apache.nifi.lookup.RestLookupService\",\n-                        \"typeDescription\": \"Use a REST service to look up values.\",\n-                        \"version\": \"2.0.0-M4\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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+                            \"Enrichment Record Reader\": {\n+                                \"description\": \"The Record Reader for reading the 'enrichment' FlowFile\",\n+                                \"displayName\": \"Enrichment Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Enrichment Record Reader\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Insertion Record Path\": {\n+                                \"defaultValue\": \"/\",\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-                                    },\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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Join Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The format used by Informix when issuing the UNLOAD TO file_name command with escaping disabled\",\n-                                        \"displayName\": \"Informix Unload Escape Disabled\",\n-                                        \"value\": \"informix-unload-csv\"\n+                                        \"description\": \"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\": \"Same as custom format. Available for compatibility reasons.\",\n-                                        \"displayName\": \"Default Format\",\n-                                        \"value\": \"default\"\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\": \"Same as RFC 4180. Available for compatibility reasons.\",\n-                                        \"displayName\": \"RFC4180\",\n-                                        \"value\": \"RFC4180\"\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\": \"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\": \"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\": \"CSV Format\",\n+                                \"name\": \"Join Strategy\",\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+                            \"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\": \"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\": \"Maximum number of Bins\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Comment Marker\": {\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-M4\"\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-M4\"\n+                                }\n+                            },\n+                            \"SQL\": {\n+                                \"defaultValue\": \"SELECT original.*, enrichment.* \\nFROM original \\nLEFT OUTER JOIN enrichment \\nON original.id = enrichment.id\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\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 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\": \"Comment Marker\",\n-                                \"required\": false,\n+                                \"name\": \"SQL\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Escape Character\": {\n-                                \"defaultValue\": \"\\\\\",\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                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join 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\": \"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\": \"Escape Character\",\n-                                \"required\": true,\n+                                \"name\": \"dbf-default-precision\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Quote Character\": {\n-                                \"defaultValue\": \"\\\"\",\n+                            \"dbf-default-scale\": {\n+                                \"defaultValue\": \"0\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"custom\"\n+                                            \"SQL\"\n                                         ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n+                                        \"propertyDisplayName\": \"Join Strategy\",\n+                                        \"propertyName\": \"Join Strategy\"\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\": \"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\": \"Quote Character\",\n-                                \"required\": true,\n+                                \"name\": \"dbf-default-scale\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ForkEnrichment\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"If one of the incoming FlowFiles (i.e., the 'original' FlowFile or the 'enrichment' FlowFile) arrives to this Processor but the other does not arrive within the configured Timeout period, the FlowFile that did arrive is routed to this relationship.\",\n+                                \"name\": \"timeout\"\n                             },\n-                            \"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\": \"The resultant FlowFile with Records joined together from both the original and enrichment FlowFiles will be routed to this relationship\",\n+                                \"name\": \"joined\"\n+                            },\n+                            {\n+                                \"description\": \"If both the 'original' and 'enrichment' FlowFiles arrive at the processor but there was a failure in joining the records, both of those FlowFiles will be routed to this relationship.\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Both of the incoming FlowFiles ('original' and 'enrichment') will be routed to this Relationship. I.e., this is the 'original' version of both of these FlowFiles.\",\n+                                \"name\": \"original\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"systemResourceConsiderations\": [\n+                            {\n+                                \"description\": \"This Processor will load into heap all FlowFiles that are on its incoming queues. While it loads the FlowFiles themselves, and not their content, the FlowFile attributes can be very memory intensive. Additionally, if the Join Strategy is set to SQL, the SQL engine may require buffering the entire contents of the enrichment FlowFile for each concurrent task. See Processor's Additional Details for more details and for steps on how to mitigate these concerns.\",\n+                                \"resource\": \"MEMORY\"\n+                            }\n+                        ],\n+                        \"tags\": [\n+                            \"combine\",\n+                            \"enrichment\",\n+                            \"fork\",\n+                            \"join\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"sql\",\n+                            \"streams\",\n+                            \"wrap\"\n+                        ],\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"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+                            {\n+                                \"configurations\": [\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+                                        \"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-                                        \"description\": \"Values will be quoted unless the value is a number.\",\n-                                        \"displayName\": \"Quote Non-Numeric Values\",\n-                                        \"value\": \"NON_NUMERIC\"\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-                                        \"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+                                        \"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-                                \"defaultValue\": \"MINIMAL\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\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-                                \"description\": \"Specifies how fields should be quoted when they are written\",\n-                                \"displayName\": \"Quote Mode\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Quote Mode\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Trim Fields\": {\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"primaryNodeOnly\": true,\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\": \"true\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"custom\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"CSV Format\",\n-                                        \"propertyName\": \"CSV Format\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether or not white space should be removed from the beginning and end of fields\",\n-                                \"displayName\": \"Trim Fields\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Whether to include the table's row count as a flow file attribute. This affects performance as a database query will be generated for each table in the retrieved list.\",\n+                                \"displayName\": \"Include Count\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Trim Fields\",\n+                                \"name\": \"list-db-include-count\",\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+                            \"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\": \"Value Separator\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-refresh-interval\",\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+                            \"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\": \"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+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-catalog\",\n+                                \"required\": false,\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\": \"true\",\n-                                \"description\": \"Ignore duplicate keys for records in the CSV file.\",\n-                                \"displayName\": \"Ignore Duplicates\",\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\": \"ignore-duplicates\",\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-M4\"\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"list-db-tables-schema-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-value-column\": {\n-                                \"description\": \"Lookup value column.\",\n-                                \"displayName\": \"Lookup Value Column\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"lookup-value-column\",\n-                                \"required\": true,\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-M4\"\n+                                }\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": 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-                            \"cache\",\n-                            \"csv\",\n-                            \"enrich\",\n-                            \"join\",\n-                            \"key\",\n-                            \"lookup\",\n-                            \"reloadable\",\n-                            \"value\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"list\",\n+                            \"sql\",\n+                            \"table\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n+                        \"triggerSerially\": true,\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\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+                                \"description\": \"Contains the name of a database table from the connection\",\n+                                \"name\": \"db.table.name\"\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-M4\"\n+                                \"description\": \"Contains the name of the catalog to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.catalog\"\n                             },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n+                                \"description\": \"Contains the name of the schema to which the table belongs (may be null)\",\n+                                \"name\": \"db.table.schema\"\n+                            },\n                             {\n-                                \"explanation\": \"Provides operator the ability to read from any file that NiFi has access to.\",\n-                                \"requiredPermission\": \"read filesystem\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"configuration-file\": {\n-                                \"description\": \"A configuration file\",\n-                                \"displayName\": \"Configuration File\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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+                                \"description\": \"Contains the fully-qualifed table name (possibly including catalog, schema, etc.)\",\n+                                \"name\": \"db.table.fullname\"\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-M4\"\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-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.StringLookupService\",\n-                                \"version\": \"2.0.0-M4\"\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-                        \"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-M4\"\n+                        ]\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"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 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-                            \"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-                            \"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+                            \"Connection Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\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\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-dbcp-service\": {\n-                                \"description\": \"The Controller Service that is used to obtain connection to database\",\n-                                \"displayName\": \"Database Connection Pooling Service\",\n+                            \"Data Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"When transferring a file between the local and remote system, this value specifies how long is allowed to elapse without any data being transferred between systems\",\n+                                \"displayName\": \"Data Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"dbrecord-lookup-dbcp-service\",\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.dbcp.DBCPService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbrecord-lookup-key-column\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Filter Regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-table-name\": {\n-                                \"description\": \"The name of the database table to be queried. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Table Name\",\n+                            \"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\": \"dbrecord-lookup-table-name\",\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-                            \"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.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"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\": \"Cache Expiration\",\n+                                \"name\": \"Http Proxy Password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"dbrecord-lookup-cache-size\",\n-                                \"required\": true,\n+                                \"name\": \"Http Proxy Username\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-clear-cache-on-enabled\": {\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\": \"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+                                \"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\": \"dbrecord-lookup-clear-cache-on-enabled\",\n+                                \"name\": \"Ignore Dotted Files\",\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+                            \"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\": \"dbrecord-lookup-dbcp-service\",\n-                                \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"dbrecord-lookup-key-column\": {\n-                                \"description\": \"The column in the table that will serve as the lookup key. This is the column that will be matched against the property specified in the lookup processor. Note that this may be case-sensitive depending on the database.\",\n-                                \"displayName\": \"Lookup Key Column\",\n+                            \"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\": \"dbrecord-lookup-key-column\",\n+                                \"name\": \"Port\",\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+                            \"Proxy Host\": {\n+                                \"description\": \"The fully qualified hostname or IP address of the proxy server\",\n+                                \"displayName\": \"Proxy Host\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"dbrecord-lookup-table-name\",\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-                            \"lookup-value-column\": {\n-                                \"description\": \"The column whose value will be returned when the Lookup value is matched\",\n-                                \"displayName\": \"Lookup Value Column\",\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\": \"lookup-value-column\",\n-                                \"required\": true,\n+                                \"name\": \"Proxy Port\",\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-M4\"\n                             },\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-lookup-services-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            \"Proxy Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type used for file transfers\",\n+                                \"displayName\": \"Proxy Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Remote Path\": {\n+                                \"defaultValue\": \".\",\n+                                \"description\": \"The path on the remote system from which to pull or push files\",\n+                                \"displayName\": \"Remote Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"database-file\",\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-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-anonymous-ip\": {\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\": \"Specifies whether or not information about whether or not the IP address belongs to an anonymous network should be returned.\",\n-                                \"displayName\": \"Lookup Anonymous IP Information\",\n+                                \"description\": \"If 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\": \"lookup-anonymous-ip\",\n+                                \"name\": \"Search Recursively\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-city\": {\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\": \"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+                                \"defaultValue\": \"Binary\",\n+                                \"description\": \"The FTP Transfer Mode\",\n+                                \"displayName\": \"Transfer Mode\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"lookup-city\",\n+                                \"name\": \"Transfer Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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-                            \"lookup-connection-type\": {\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\": \"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+                                \"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\": \"lookup-connection-type\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-domain\": {\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-M4\"\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+                            \"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\": \"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\": \"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\": \"lookup-domain\",\n+                                \"name\": \"follow-symlink\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"lookup-isp\": {\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\": \"Specifies whether or not information about the Information Service Provider corresponding to the IP address should be returned\",\n-                                \"displayName\": \"Lookup ISP\",\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\": \"lookup-isp\",\n+                                \"name\": \"ftp-use-utf8\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.lookup.LookupService\",\n-                                \"version\": \"2.0.0-M4\"\n                             },\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-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-compress-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-compress-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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 Compression Strategy\": {\n+                            \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"No Compression\",\n-                                        \"displayName\": \"no compression\",\n-                                        \"value\": \"no compression\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use the [mime.type] attribute from the input FlowFile to determine the format\",\n-                                        \"displayName\": \"use mime.type attribute\",\n-                                        \"value\": \"use mime.type attribute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"GZIP\",\n-                                        \"displayName\": \"gzip\",\n-                                        \"value\": \"gzip\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Deflate\",\n-                                        \"displayName\": \"deflate\",\n-                                        \"value\": \"deflate\"\n-                                    },\n-                                    {\n-                                        \"description\": \"BZIP2\",\n-                                        \"displayName\": \"bzip2\",\n-                                        \"value\": \"bzip2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"XZ-LZMA2\",\n-                                        \"displayName\": \"xz-lzma2\",\n-                                        \"value\": \"xz-lzma2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"LZMA\",\n-                                        \"displayName\": \"lzma\",\n-                                        \"value\": \"lzma\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy\",\n-                                        \"displayName\": \"snappy\",\n-                                        \"value\": \"snappy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Snappy-Framed\",\n-                                        \"displayName\": \"snappy-framed\",\n-                                        \"value\": \"snappy-framed\"\n+                                        \"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\": \"LZ4\",\n-                                        \"displayName\": \"lz4-framed\",\n-                                        \"value\": \"lz4-framed\"\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\": \"ZSTD\",\n-                                        \"displayName\": \"zstd\",\n-                                        \"value\": \"zstd\"\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\": \"Brotli\",\n-                                        \"displayName\": \"brotli\",\n-                                        \"value\": \"brotli\"\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\": \"no compression\",\n-                                \"description\": \"The strategy to use for decompressing input FlowFiles\",\n-                                \"displayName\": \"Input Compression 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\": \"Input Compression Strategy\",\n+                                \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"Output Compression Level\",\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-M4\"\n+                                }\n                             },\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+                            \"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\": \"Output Compression Strategy\",\n-                                \"required\": true,\n-                                \"sensitive\": false\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-M4\"\n+                                }\n                             },\n-                            \"Output Filename Strategy\": {\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Retain the filename attribute value from the input FlowFile\",\n-                                        \"displayName\": \"Original\",\n-                                        \"value\": \"ORIGINAL\"\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\": \"Remove the filename extension when decompressing and add a new extension for compressed output FlowFiles\",\n-                                        \"displayName\": \"Updated\",\n-                                        \"value\": \"UPDATED\"\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\": \"UPDATED\",\n-                                \"description\": \"Processing strategy for filename attribute on output FlowFiles\",\n-                                \"displayName\": \"Output Filename 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\": \"Output Filename Strategy\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"If the Decompression Format is set to 'use mime.type attribute', this attribute is used to determine the decompression type. Otherwise, this attribute is ignored.\",\n-                                \"name\": \"mime.type\"\n-                            }\n+                        \"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\": 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 will be transferred to the failure relationship on compression modification errors\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification 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-                        \"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+                            \"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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The appropriate MIME Type is set based on the value of the Compression Format property. If the Compression Format is 'no compression' this attribute is removed as the MIME Type is no longer known.\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The hostname of the FTP Server\",\n+                                \"name\": \"ftp.remote.host\"\n+                            },\n+                            {\n+                                \"description\": \"The port that was connected to on the FTP Server\",\n+                                \"name\": \"ftp.remote.port\"\n+                            },\n+                            {\n+                                \"description\": \"The username of the user that performed the FTP Listing\",\n+                                \"name\": \"ftp.listing.user\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric owner id of the source file\",\n+                                \"name\": \"file.owner\"\n+                            },\n+                            {\n+                                \"description\": \"The numeric group id of the source file\",\n+                                \"name\": \"file.group\"\n+                            },\n+                            {\n+                                \"description\": \"The read/write/execute permissions of the source file\",\n+                                \"name\": \"file.permissions\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes in the source file\",\n+                                \"name\": \"file.size\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file in the filesystem waslast modified as 'yyyy-MM-dd'T'HH:mm:ssZ'\",\n+                                \"name\": \"file.lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the file on the FTP Server\",\n+                                \"name\": \"filename\"\n+                            },\n+                            {\n+                                \"description\": \"The fully qualified name of the directory on the FTP Server from which the file was pulled\",\n+                                \"name\": \"path\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70264,666 +71015,1179 @@\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+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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+                            \"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\": \"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-M4\"\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+                                \"name\": \"File Filter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Ignore Hidden Files\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"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\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"Include File Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to include information such as the file's Last Modified Time and Owner as FlowFile Attributes. Depending on the File System being used, gathering this information can be expensive and as a result should be disabled. This is especially true of remote file shares.\",\n+                                \"displayName\": \"Include File Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-hits\",\n+                                \"name\": \"Include File Attributes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n+                            \"Input Directory\": {\n+                                \"description\": \"The input directory from which files to pull files\",\n+                                \"displayName\": \"Input Directory\",\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+                                \"sensitive\": false\n+                            },\n+                            \"Input Directory Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Input Directory is located on a local disk. State will be stored locally on each node in the cluster.\",\n+                                        \"displayName\": \"Local\",\n+                                        \"value\": \"Local\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Input Directory is located on a remote system. State will be stored across the cluster so that the listing can be performed on Primary Node Only and another node can pick up where the last node left off, if the Primary Node changes\",\n+                                        \"displayName\": \"Remote\",\n+                                        \"value\": \"Remote\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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\": \"Local\",\n+                                \"description\": \"Specifies where the Input Directory is located. This is used to determine whether state should be stored locally or across the cluster.\",\n+                                \"displayName\": \"Input Directory Location\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n+                                \"name\": \"Input Directory Location\",\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+                            \"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\": \"el-rest-pagination-keep-alive\",\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-                            \"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+                            \"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\": \"el-rest-pagination-type\",\n+                                \"name\": \"Minimum File Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\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\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n+                            \"et-initial-listing-target\": {\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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"el-rest-split-up-hits\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"et-node-identifier\": {\n+                                \"defaultValue\": \"${hostname()}\",\n+                                \"description\": \"The configured value will be appended to the cache key so that listing state can be tracked per NiFi node rather than cluster wide when tracking state is scoped to LOCAL. Used by 'Tracking Entities' strategy.\",\n+                                \"displayName\": \"Entity Tracking Node Identifier\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\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-                            \"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+                            \"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\": \"es-rest-additional-filters\",\n+                                \"name\": \"et-state-cache\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"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\": \"es-rest-query-aggs\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-script-fields\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\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-                            \"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+                            \"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\": \"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\": \"max-performance-metrics\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-range-format\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-value\"\n-                                    }\n-                                ],\n-                                \"description\": \"If the \\\"Range Query Field\\\" is a Date field, convert the \\\"Initial Value\\\" to a date with this format. If not specified, Elasticsearch will use the date format provided by the \\\"Range Query Field\\\"'s mapping. For valid syntax, see https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html\",\n-                                \"displayName\": \"Initial Value Date Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"es-rest-range-format\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"es-rest-range-initial-value\": {\n-                                \"description\": \"The initial value to use for the query if the processor has not run previously. If the processor has run previously and stored a value in its state, this property will be ignored. If no value is provided, and the processor has not previously run, no Range query bounds will be used, i.e. all documents will be retrieved in the specified \\\"Sort Order\\\".\",\n-                                \"displayName\": \"Initial Value\",\n+                            \"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\": \"es-rest-range-initial-value\",\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-M4\"\n+                                }\n                             },\n-                            \"es-rest-range-time-zone\": {\n-                                \"dependencies\": [\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Initial Value\",\n-                                        \"propertyName\": \"es-rest-range-initial-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\": \"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-                                \"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+                                \"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\": \"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-                                \"required\": false,\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-sort-order\": {\n+                            \"track-performance\": {\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\": \"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\": \"es-rest-sort-order\",\n+                                \"name\": \"track-performance\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\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\": \"The pagination state (scrollId, searchAfter, pitId, hitCount, pageCount, pageExpirationTimestamp, trackingRangeValue) is retained in between invocations of this processor until the Scroll/PiT has expired (when the current time is later than the last query execution plus the Pagination Keep Alive interval).\",\n+                            \"description\": \"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+                                \"CLUSTER\",\n+                                \"LOCAL\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"All 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-                        \"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+                            \"file\",\n+                            \"filesystem\",\n+                            \"get\",\n+                            \"ingest\",\n+                            \"list\",\n+                            \"source\"\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The number of the page (request), starting from 1, in which the results were returned that are in the output flowfile\",\n-                                \"name\": \"page.number\"\n+                                \"description\": \"The 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 number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\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 error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\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\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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\",\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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\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\": \"Max JSON Field String Length\",\n+                                \"name\": \"Connection Timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"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\": \"el-query-attribute\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Data Timeout\",\n+                                \"required\": true,\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+                            \"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\": \"el-rest-client-service\",\n-                                \"required\": true,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"el-rest-fetch-index\",\n+                                \"name\": \"Hostname\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query\": {\n-                                \"dependencies\": [\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-                                        \"dependentValues\": [\n-                                            \"full\"\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 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\": \"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+                            \"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\": \"el-rest-query\",\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-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\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-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\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 \\\"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\": \"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\": \"el-rest-query-clause\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Proxy Type\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\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+                            \"Search Recursively\": {\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\": \"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\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Search Recursively\",\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+                            \"Send Keep Alive On Timeout\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Send a Keep Alive message every 5 seconds up to 5 times for an overall timeout of 25 seconds.\",\n+                                \"displayName\": \"Send Keep Alive On Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Strict Host Key Checking\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Indicates whether or not strict enforcement of hosts keys should be applied\",\n+                                \"displayName\": \"Strict Host Key Checking\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Use Compression\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"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\": \"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\": \"el-rest-type\",\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+                            \"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-M4\"\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+                            \"follow-symlink\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will pull even symbolic files and also nested symbolic subdirectories; otherwise, will not read symbolic files and will not traverse symbolic link subdirectories\",\n+                                \"displayName\": \"Follow symlink\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"follow-symlink\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"listing-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n+                                        \"displayName\": \"No Tracking\",\n+                                        \"value\": \"none\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This strategy uses a sliding time window. The window starts where the previous window ended and ends with the 'current time'. One cycle will list files with modification time falling within the time window. Works even when multiple subdirectories are being written at the same time while listing is running. IMPORTANT: This strategy works properly only if the time on both the system hosting NiFi and the one hosting the files are accurate.\",\n+                                        \"displayName\": \"Time Window\",\n+                                        \"value\": \"time-window\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"timestamps\",\n+                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n+                                \"displayName\": \"Listing Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"listing-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: 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-M4\"\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-M4\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n+                                    },\n+                                    {\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"target-system-timestamp-precision\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.FetchSFTP\",\n+                            \"org.apache.nifi.processors.standard.GetSFTP\",\n+                            \"org.apache.nifi.processors.standard.PutSFTP\"\n+                        ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node will not duplicate the data that was listed by the previous Primary Node.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be sent to this relationship.\",\n+                                \"description\": \"All FlowFiles that are received are routed to success\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent to this relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\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-                            \"delete\",\n-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\"\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.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.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-M4\",\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 hostname of the SFTP Server\",\n+                                \"name\": \"sftp.remote.host\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error running the delete.\",\n-                                \"name\": \"elasticsearch.delete.error\"\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\": false,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -70931,187 +72195,119 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of a URL query parameter to add\",\n-                                \"value\": \"The value of the URL query parameter\"\n-                            }\n-                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\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+                            \"bind-address\": {\n+                                \"description\": \"The address the FTP server should be bound to. If not set (or set to 0.0.0.0), the server binds to all available addresses (i.e. all network interfaces of the host machine).\",\n+                                \"displayName\": \"Bind Address\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\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-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\n+                            \"listening-port\": {\n+                                \"defaultValue\": \"2221\",\n+                                \"description\": \"The Port to listen on for incoming connections. On Linux, root privileges are required to use port numbers below 1024.\",\n+                                \"displayName\": \"Listening Port\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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\": \"listening-port\",\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+                            \"password\": {\n+                                \"description\": \"If the Username is set, then a password must also be specified. The password provided by the client trying to log in to the FTP server will be checked against this password.\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-type\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"get-es-attribute-name\": {\n-                                \"defaultValue\": \"elasticsearch.doc\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"flowfile-attribute\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Destination\",\n-                                        \"propertyName\": \"get-es-destination\"\n-                                    }\n-                                ],\n-                                \"description\": \"The name of the FlowFile attribute to use for the retrieved document output.\",\n-                                \"displayName\": \"Attribute Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-attribute-name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\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+                            \"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\": \"get-es-destination\",\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-M4\"\n+                                }\n                             },\n-                            \"get-es-id\": {\n-                                \"description\": \"The _id of the document to retrieve.\",\n-                                \"displayName\": \"Document Id\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"get-es-id\",\n-                                \"required\": true,\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-                        \"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-                            },\n-                            {\n-                                \"description\": \"A FlowFile is routed to this relationship if the specified document does not exist in the Elasticsearch cluster.\",\n-                                \"name\": \"not_found\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n-                            },\n-                            {\n-                                \"description\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Relationship for successfully received files.\",\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-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"index\",\n-                            \"json\",\n-                            \"put\",\n-                            \"record\"\n+                            \"FTP\",\n+                            \"FTPS\",\n+                            \"ingest\",\n+                            \"listen\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.GetElasticsearch\",\n-                        \"typeDescription\": \"Elasticsearch get processor that uses the official Elastic REST client libraries to fetch a single document from Elasticsearch by _id. Note that the full body of the document will be read into memory before being written to a FlowFile for transfer.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The filename attribute is set to the document identifier\",\n+                                \"description\": \"The name of the file received via the FTP/FTPS connection.\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The Elasticsearch index containing the document\",\n-                                \"name\": \"elasticsearch.index\"\n-                            },\n-                            {\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+                                \"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-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71119,440 +72315,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\": \"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_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\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\": \"Max JSON Field String Length\",\n+                                \"name\": \"Authorized DN Pattern\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\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+                            \"Base Path\": {\n+                                \"defaultValue\": \"contentListener\",\n+                                \"description\": \"Base path for incoming connections\",\n+                                \"displayName\": \"Base Path\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-query-attribute\",\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-                            \"el-rest-client-service\": {\n-                                \"description\": \"An Elasticsearch client service to use for running queries.\",\n-                                \"displayName\": \"Client Service\",\n+                            \"HTTP Protocols\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"HTTP/1.1\",\n+                                        \"displayName\": \"http/1.1\",\n+                                        \"value\": \"HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2 and HTTP/1.1 negotiated based on requested protocols\",\n+                                        \"displayName\": \"h2 http/1.1\",\n+                                        \"value\": \"H2_HTTP_1_1\"\n+                                    },\n+                                    {\n+                                        \"description\": \"HTTP/2\",\n+                                        \"displayName\": \"h2\",\n+                                        \"value\": \"H2\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"HTTP_1_1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n+                                    }\n+                                ],\n+                                \"description\": \"HTTP Protocols supported for Application Layer Protocol Negotiation with TLS\",\n+                                \"displayName\": \"HTTP Protocols\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-client-service\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Unconfirmed Flowfile Time\",\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-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-fetch-index\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"authorized-issuer-dn-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"client-authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\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\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\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\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"Requests the client certificate on handshake and rejects the connection if it is not present and valid\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Does not request the client certificate on handshake\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\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\": \"el-rest-format-aggregations\",\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-                            \"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+                            \"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\": \"el-rest-format-hits\",\n+                                \"name\": \"multipart-read-buffer-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                            \"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\": \"el-rest-output-no-hits\",\n+                                \"name\": \"multipart-request-max-size\",\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+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use parsing the incoming FlowFile into Records\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"el-rest-query-clause\": {\n+                            \"record-writer\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"description\": \"The Record Writer to use for serializing Records after they have been transformed\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-query-clause\",\n-                                \"required\": 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-M4\"\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+                            \"http\",\n+                            \"https\",\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"rest\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\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\": \"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\": \"el-rest-query-definition-style\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                            \"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\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"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+                            \"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\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"el-rest-type\",\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-                            \"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+                            \"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\": \"es-rest-query-aggs\",\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-                            \"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+                            \"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\": \"es-rest-query-fields\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\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+                            \"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\": \"es-rest-query-script-fields\",\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-                            \"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+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\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+                            \"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\": \"es-rest-size\",\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-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PaginatedJsonQueryElasticsearch\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\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\": \"All flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicProperties\": false,\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+                            \"listen\",\n+                            \"logs\",\n+                            \"relp\",\n+                            \"tcp\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to run a query (with aggregations) written with the Elasticsearch JSON DSL. It does not automatically paginate queries for the user. If an incoming relationship is added to this processor, it will use the flowfile's content for the query. Care should be taken on the size of the query because the entire response from Elasticsearch will be loaded into memory all at once and converted into the resulting flowfiles.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The command of the RELP frames.\",\n+                                \"name\": \"relp.command\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"relp.sender\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The sending port the messages were received over.\",\n+                                \"name\": \"relp.port\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The transaction number of the message. Only included if <Batch Size> is 1.\",\n+                                \"name\": \"relp.txnr\"\n                             },\n                             {\n-                                \"description\": \"The error message provided by Elasticsearch if there is an error querying the index.\",\n-                                \"name\": \"elasticsearch.query.error\"\n+                                \"description\": \"The mime.type of the content which is text/plain\",\n+                                \"name\": \"mime.type\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -71560,497 +72843,363 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"el-rest-fetch-index\",\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-                            \"el-rest-format-aggregations\": {\n+                            \"Client Auth\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-format-aggregations\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-format-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n-                                    },\n+                                \"defaultValue\": \"REQUIRED\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"propertyDisplayName\": \"SSL Context Service\",\n+                                        \"propertyName\": \"SSL Context Service\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\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\": \"el-rest-format-hits\",\n-                                \"required\": true,\n+                                \"name\": \"Client Auth\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n+                            \"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\": \"el-rest-output-no-hits\",\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-                            \"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+                            \"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\": \"el-rest-pagination-keep-alive\",\n+                                \"name\": \"Max Batch Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n+                            \"Max Number of TCP Connections\": {\n+                                \"defaultValue\": \"2\",\n+                                \"dependencies\": [\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+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\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+                                \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"el-rest-query\",\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-                            \"el-rest-query-clause\": {\n+                            \"Max Size of Socket Buffer\": {\n+                                \"defaultValue\": \"1 MB\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n                                     }\n                                 ],\n-                                \"description\": \"A \\\"query\\\" clause in JSON syntax, not Lucene syntax. Ex: {\\\"match\\\":{\\\"somefield\\\":\\\"somevalue\\\"}}. If the query is empty, a default JSON Object will be used, which will result in a \\\"match_all\\\" query in Elasticsearch.\",\n-                                \"displayName\": \"Query Clause\",\n+                                \"description\": \"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\": \"el-rest-query-clause\",\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-                            \"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+                            \"Message Delimiter\": {\n+                                \"defaultValue\": \"\\\\n\",\n+                                \"description\": \"Specifies the delimiter to place between Syslog messages when multiple messages are bundled together (see <Max Batch Size> property).\",\n+                                \"displayName\": \"Message Delimiter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Message Delimiter\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n+                            \"Parse Messages\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"el-rest-split-up-aggregations\",\n+                                \"name\": \"Parse Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\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\": \"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\": \"TCP\",\n+                                        \"value\": \"TCP\"\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\": \"UDP\",\n+                                        \"value\": \"UDP\"\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\": \"UDP\",\n+                                \"description\": \"The protocol for Syslog communication.\",\n+                                \"displayName\": \"Protocol\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-hits\",\n+                                \"name\": \"Protocol\",\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-                                    {\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+                            \"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\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n+                            \"SSL Context Service\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-fields\",\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-M4\"\n+                                }\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n+                            \"socket-keep-alive\": {\n+                                \"allowableValues\": [\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"defaultValue\": \"false\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"TCP\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-size\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"socket-keep-alive\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.ConsumeElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.JsonQueryElasticsearch\",\n-                            \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\"\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n-                            },\n-                            {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n-                            },\n-                            {\n-                                \"description\": \"All original flowfiles that don't cause an error to occur go to this relationship.\",\n-                                \"name\": \"original\"\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 flowfiles that fail for reasons unrelated to server availability go to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Syslog messages that do not match one of the expected formats will be sent out this relationship as a FlowFile per message.\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"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+                            \"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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"application/json\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"The name of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.name\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"The number of the aggregation whose results are in the output flowfile\",\n-                                \"name\": \"aggregation.number\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\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 optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"The number of hits that are in the output flowfile\",\n-                                \"name\": \"hit.count\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\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 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-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72058,307 +73207,498 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Prefix: BULK: - adds the specified property name/value as a Bulk request header in the Elasticsearch Bulk API body used for processing. If the value is null or blank, the Bulk header will be omitted for the document operation. These parameters will override any matching parameters in the _bulk request body.\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"The name of the Bulk request header\",\n-                                \"value\": \"The value of the Bulk request header\"\n-                            },\n-                            {\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\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\": \"Max JSON Field String Length\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\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+                            \"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\": \"el-rest-client-service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"el-rest-fetch-index\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Number of TCP Connections\",\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+                            \"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\": \"el-rest-type\",\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-                            \"put-es-json-charset\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the document data.\",\n-                                \"displayName\": \"Character Set\",\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\": \"put-es-json-charset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Size of Socket Buffer\",\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+                            \"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\": \"put-es-json-dynamic_templates\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-json-id-attr\",\n-                                \"required\": false,\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-json-script\",\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-M4\"\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-                            \"put-es-json-scripted-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\": \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-json-scripted-upsert\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-receiving-threads\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-not_found-is-error\": {\n+                            \"pool-receive-buffers\": {\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, \\\"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+                                \"defaultValue\": \"True\",\n+                                \"description\": \"Enable or disable pooling of buffers that the processor uses for handling bytes received on socket connections. The framework allocates buffers as needed during processing.\",\n+                                \"displayName\": \"Pool Receive Buffers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-not_found-is-error\",\n+                                \"name\": \"pool-receive-buffers\",\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+                                \"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+                            \"listen\",\n+                            \"ssl\",\n+                            \"tcp\",\n+                            \"tls\"\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+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"tcp.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"tcp.port\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the Certificate Authority that issued the client's certificate is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.issuer.dn\"\n+                            },\n+                            {\n+                                \"description\": \"For connections using mutual TLS, the Distinguished Name of the client certificate's owner (subject) is attached to the FlowFile.\",\n+                                \"name\": \"client.certificate.subject.dn\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"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-                            \"put-es-output-error-responses\": {\n+                            \"client-auth\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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\": \"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\": \"put-es-output-error-responses\",\n+                                \"name\": \"client-auth\",\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+                            \"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+                            \"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\": \"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\": \"put-es-record-batch-size\",\n+                                \"name\": \"port\",\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+                            \"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\": \"put-es-record-index-op\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"read-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-log-error-responses\": {\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\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                                \"defaultValue\": \"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\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"reader-error-handling-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchRecord\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\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 are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\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\": \"record-batch-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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-M4\"\n+                                }\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+                            \"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\": \"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-M4\"\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-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\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+                            \"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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The error message if there is an issue parsing the FlowFile, sending the parsed document to Elasticsearch or parsing the Elasticsearch response\",\n-                                \"name\": \"elasticsearch.put.error\"\n+                                \"description\": \"The host that sent the data.\",\n+                                \"name\": \"tcp.sender\"\n                             },\n                             {\n-                                \"description\": \"The _bulk response if there was an error during processing the document within Elasticsearch.\",\n-                                \"name\": \"elasticsearch.bulk.error\"\n+                                \"description\": \"The 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\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -72366,986 +73706,794 @@\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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\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\": \"Max JSON Field String Length\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\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-M4\"\n-                                }\n-                            },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"el-rest-fetch-index\",\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-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\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\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Max Batch Size\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-not_found-is-error\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Message Queue\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-output-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"Max Size of Socket Buffer\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-record-at-timestamp\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Message Delimiter\",\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+                            \"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\": \"put-es-record-at-timestamp-date-format\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\n+                                \"required\": true,\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+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-at-timestamp-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-at-timestamp-time-format\": {\n-                                \"description\": \"Specifies the format to use when writing Time fields. If not specified, the default format 'HH:mm:ss' is used. If specified, the value must match the Java Simple Date Format (for example, HH:mm:ss for a two-digit hour in 24-hour format, followed by a two-digit minute, followed by a two-digit second, all separated by ':' characters, as in 18:04:15).\",\n-                                \"displayName\": \"Time Format\",\n+                            \"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\": \"put-es-record-at-timestamp-time-format\",\n+                                \"name\": \"Sending Host\",\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+                            \"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\": \"put-es-record-at-timestamp-timestamp-format\",\n+                                \"name\": \"Sending Host Port\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"ingest\",\n+                            \"listen\",\n+                            \"source\",\n+                            \"udp\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ListenUDP\",\n+                        \"typeDescription\": \"Listens for Datagram Packets on a given port. The default behavior produces a FlowFile per datagram, however for higher throughput the Max Batch Size property may be increased to specify the number of datagrams to batch together in a single FlowFile. This processor can be restricted to listening for datagrams from  a specific remote host and port by specifying the Sending Host and Sending Host Port properties, otherwise it will listen for datagrams from all hosts and ports.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\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-                            \"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-                                \"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+                            {\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-bulk-error-groups\",\n-                                \"required\": false,\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\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+                            \"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\": \"put-es-record-dynamic-templates-path\",\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-                            \"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+                            \"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\": \"put-es-record-error-writer\",\n+                                \"name\": \"Max Size of Message Queue\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"put-es-record-id-path\",\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-                            \"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+                            \"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\": \"put-es-record-index-op\",\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-                            \"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+                            \"Receive Buffer Size\": {\n+                                \"defaultValue\": \"65507 B\",\n+                                \"description\": \"The size of each buffer used to receive messages. Adjust this value appropriately based on the expected size of the incoming messages.\",\n+                                \"displayName\": \"Receive Buffer Size\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-op-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Receive Buffer Size\",\n+                                \"required\": true,\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-index-record-path\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"batch-size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-log-error-responses\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"If this is enabled, errors will be logged to the NiFi logs at the error log level. Otherwise, they will only be logged if debug logging is enabled on NiFi as a whole. The purpose of this option is to give the user the ability to debug failed operations without having to turn on debug logging.\",\n-                                \"displayName\": \"Log Error Responses\",\n+                            \"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\": \"put-es-record-log-error-responses\",\n-                                \"required\": false,\n+                                \"name\": \"poll-timeout\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"put-es-record-reader\": {\n-                                \"description\": \"The record reader to use for reading incoming records from flowfiles.\",\n+                            \"record-reader\": {\n+                                \"description\": \"The Record Reader to use for reading the content of incoming datagrams.\",\n                                 \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"put-es-record-reader\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\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-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"@timestamp Record Path\",\n-                                        \"propertyName\": \"put-es-record-at-timestamp-path\"\n-                                    }\n-                                ],\n-                                \"description\": \"Whether to retain the existing field used as the @timestamp Record Path.\",\n-                                \"displayName\": \"Retain @timestamp (Record Path)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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-                                    {\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\": \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-script-path\",\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-M4\"\n+                                }\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-scripted-upsert-path\",\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"put-es-record-type-record-path\",\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-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.elasticsearch.PutElasticsearchJson\"\n-                        ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\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 are sent to Elasticsearch without request failures go to this relationship.\",\n-                                \"name\": \"original\"\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+                                \"description\": \"Messages received successfully will be sent out this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\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-                        \"supportsDynamicProperties\": true,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\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+                            \"ingest\",\n+                            \"listen\",\n+                            \"record\",\n+                            \"source\",\n+                            \"udp\"\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+                        \"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-M4\",\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+                                \"description\": \"The sending host of the messages.\",\n+                                \"name\": \"udp.sender\"\n                             },\n                             {\n-                                \"description\": \"The number of records that generated errors in the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.error.count\"\n+                                \"description\": \"The sending port the messages were received.\",\n+                                \"name\": \"udp.port\"\n                             },\n                             {\n-                                \"description\": \"The number of records that were successfully processed by the Elasticsearch _bulk API.\",\n-                                \"name\": \"elasticsearch.put.success.count\"\n+                                \"description\": \"The number of records written to the flow file.\",\n+                                \"name\": \"record.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+                                \"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-elasticsearch-restapi-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n                         },\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"1 min\"\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body. For SCROLL type queries, these parameters are only used in the initial (first page) query as the Elasticsearch Scroll API does not support the same query parameters for subsequent pages of data.\",\n-                                \"expressionLanguageScope\": \"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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": true,\n+                        \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\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\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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\": \"Attributes to Ignore\",\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+                            \"Attributes to Log\": {\n+                                \"description\": \"A comma-separated list of Attributes to Log. If not specified, all attributes will be logged unless `Attributes to Log by Regular Expression` is modified. There's an AND relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Log\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\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+                                \"name\": \"Attributes to Log\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-aggregations\": {\n+                            \"Log FlowFile Properties\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Aggregation, including Buckets and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Bucket Content only.\",\n-                                        \"displayName\": \"BUCKETS_ONLY\",\n-                                        \"value\": \"BUCKETS_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Aggregation Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"FULL\",\n-                                \"description\": \"Format of Aggregation output.\",\n-                                \"displayName\": \"Aggregation Results Format\",\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Specifies 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\": \"el-rest-format-aggregations\",\n+                                \"name\": \"Log FlowFile Properties\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-format-hits\": {\n+                            \"Log Level\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Contains full Elasticsearch Hit, including Document Source and Metadata.\",\n-                                        \"displayName\": \"FULL\",\n-                                        \"value\": \"FULL\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"trace\",\n+                                        \"value\": \"trace\"\n                                     },\n                                     {\n-                                        \"description\": \"Document Source only (where present).\",\n-                                        \"displayName\": \"SOURCE_ONLY\",\n-                                        \"value\": \"SOURCE_ONLY\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"debug\",\n+                                        \"value\": \"debug\"\n                                     },\n                                     {\n-                                        \"description\": \"Hit Metadata only.\",\n-                                        \"displayName\": \"METADATA_ONLY\",\n-                                        \"value\": \"METADATA_ONLY\"\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\": \"FULL\",\n-                                \"description\": \"Format of Hits output.\",\n-                                \"displayName\": \"Search Results Format\",\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\": \"el-rest-format-hits\",\n+                                \"name\": \"Log Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-output-no-hits\": {\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\": \"Output a \\\"hits\\\" flowfile even if no hits found for query. If true, an empty \\\"hits\\\" flowfile will be output even if \\\"aggregations\\\" are output.\",\n-                                \"displayName\": \"Output No Hits\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-output-no-hits\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-keep-alive\": {\n-                                \"defaultValue\": \"10 mins\",\n-                                \"description\": \"Pagination \\\"keep_alive\\\" period. Period Elasticsearch will keep the scroll/pit cursor alive in between requests (this is not the time expected for all pages to be returned, but the maximum allowed time for requests between page retrievals).\",\n-                                \"displayName\": \"Pagination Keep Alive\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-keep-alive\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"el-rest-pagination-type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"_scroll\\\" API to page results. Does not accept additional query parameters.\",\n-                                        \"displayName\": \"SCROLL\",\n-                                        \"value\": \"pagination-scroll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch \\\"search_after\\\" _search API to page sorted results.\",\n-                                        \"displayName\": \"SEARCH_AFTER\",\n-                                        \"value\": \"pagination-search_after\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Use Elasticsearch (7.10+ with XPack) \\\"point in time\\\" _search API to page sorted results. 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+                                \"description\": \"If true, the FlowFile's payload will be logged, in addition to its attributes; otherwise, just the Attributes will be logged.\",\n+                                \"displayName\": \"Log Payload\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-pagination-type\",\n+                                \"name\": \"Log Payload\",\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 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-                                    {\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+                            \"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\": \"el-rest-query-clause\",\n+                                \"name\": \"Log prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\n+                            \"Output Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\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\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\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\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\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\": \"el-rest-query-definition-style\",\n+                                \"name\": \"Output Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-aggregations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Flowfile per response.\",\n-                                        \"displayName\": \"PER_RESPONSE\",\n-                                        \"value\": \"splitUp-no\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"splitUp-no\",\n-                                \"description\": \"Output a flowfile containing all aggregations or one flowfile for each individual aggregation.\",\n-                                \"displayName\": \"Aggregation Results Split\",\n+                            \"attributes-to-ignore-regex\": {\n+                                \"description\": \"A regular expression indicating the Attributes to Ignore. If not specified, no attributes will be ignored unless `Attributes to Ignore` is modified. There's an OR relationship between the two properties.\",\n+                                \"displayName\": \"Attributes to Ignore by Regular Expression\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"el-rest-split-up-aggregations\",\n-                                \"required\": true,\n+                                \"name\": \"attributes-to-ignore-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-split-up-hits\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Flowfile per hit.\",\n-                                        \"displayName\": \"PER_HIT\",\n-                                        \"value\": \"splitUp-yes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"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+                            \"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\": \"el-rest-split-up-hits\",\n-                                \"required\": true,\n+                                \"name\": \"attributes-to-log-regex\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"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\": \"el-rest-type\",\n-                                \"required\": false,\n+                                \"name\": \"character-set\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"es-rest-query-aggs\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"One or more query aggregations (or \\\"aggs\\\"), in JSON syntax. Ex: {\\\"items\\\": {\\\"terms\\\": {\\\"field\\\": \\\"product\\\", \\\"size\\\": 10}}}\",\n-                                \"displayName\": \"Aggregations\",\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"logging\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.LogAttribute\",\n+                        \"typeDescription\": \"Emits attributes of the FlowFile at the specified log level\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"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\": \"es-rest-query-aggs\",\n-                                \"required\": false,\n+                                \"name\": \"log-level\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields of indexed documents to be retrieved, in JSON syntax. Ex: [\\\"user.id\\\", \\\"http.response.*\\\", {\\\"field\\\": \\\"@timestamp\\\", \\\"format\\\": \\\"epoch_millis\\\"}]\",\n-                                \"displayName\": \"Fields\",\n+                            \"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\": \"es-rest-query-fields\",\n+                                \"name\": \"log-message\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"es-rest-query-script-fields\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n-                                    }\n-                                ],\n-                                \"description\": \"Fields to created using script evaluation at query runtime, in JSON syntax. Ex: {\\\"test1\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * 2\\\"}}, \\\"test2\\\": {\\\"script\\\": {\\\"lang\\\": \\\"painless\\\", \\\"source\\\": \\\"doc['price'].value * params.factor\\\", \\\"params\\\": {\\\"factor\\\": 2.0}}}}\",\n-                                \"displayName\": \"Script Fields\",\n+                            \"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\": \"es-rest-query-script-fields\",\n+                                \"name\": \"log-prefix\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n-                            },\n-                            \"es-rest-query-sort\": {\n-                                \"dependencies\": [\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"logging\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.LogMessage\",\n+                        \"typeDescription\": \"Emits a log message at the specified log level\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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+                            \"include-empty-values\": {\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\": \"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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"es-rest-query-sort\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"include-empty-values\",\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+                            \"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\": \"es-rest-size\",\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-M4\"\n+                                }\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Aggregations are routed to this relationship.\",\n-                                \"name\": \"aggregations\"\n+                                \"description\": \"FlowFiles with failing lookups are routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"Search hits are routed to this relationship.\",\n-                                \"name\": \"hits\"\n+                                \"description\": \"FlowFiles with missing lookups are routed to this relationship\",\n+                                \"name\": \"unmatched\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles with matching lookups are routed to this relationship\",\n+                                \"name\": \"matched\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\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+                            \"Attribute Expression Language\",\n+                            \"attributes\",\n+                            \"cache\",\n+                            \"enrich\",\n+                            \"join\",\n+                            \"lookup\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.elasticsearch.SearchElasticsearch\",\n-                        \"typeDescription\": \"A processor that allows the user to repeatedly run a paginated query (with aggregations) written with the Elasticsearch JSON DSL. Search After/Point in Time queries must include a valid \\\"sort\\\" field. The processor will retrieve multiple pages of results until either no more results are available or the Pagination Keep Alive expiration is reached, after which the query will restart with the first page of results being retrieved.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.LookupAttribute\",\n+                        \"typeDescription\": \"Lookup attributes from a lookup service\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-elasticsearch-restapi-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -73355,1937 +74503,1209 @@\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Adds the specified property name/value as a query parameter in the Elasticsearch URL used for processing. These parameters will override any matching parameters in the query request body\",\n+                                \"description\": \"A RecordPath that points to the field whose value will be looked up in the configured Lookup Service\",\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\": \"Value To Lookup\",\n+                                \"value\": \"Valid Record Path\"\n                             }\n                         ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_ALLOWED\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Max JSON Field String Length\": {\n-                                \"defaultValue\": \"20 MB\",\n-                                \"description\": \"The maximum allowed length of a string value when parsing a JSON document or attribute.\",\n-                                \"displayName\": \"Max JSON Field String Length\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max JSON Field String Length\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\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+                            \"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\": \"el-query-attribute\",\n+                                \"name\": \"Root Record Path\",\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+                            \"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\": \"el-rest-client-service\",\n+                                \"name\": \"lookup-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                    \"type\": \"org.apache.nifi.lookup.LookupService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"el-rest-fetch-index\": {\n-                                \"description\": \"The name of the index to use.\",\n-                                \"displayName\": \"Index\",\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\": \"el-rest-fetch-index\",\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-                            \"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+                            \"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\": \"el-rest-query\",\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-M4\"\n+                                }\n                             },\n-                            \"el-rest-query-clause\": {\n-                                \"dependencies\": [\n+                            \"record-update-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"build\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\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-                                \"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\": \"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\": \"el-rest-query-clause\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-update-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-query-definition-style\": {\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-M4\"\n+                                }\n+                            },\n+                            \"result-contents\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Provide the full Query.\",\n-                                        \"displayName\": \"FULL_QUERY\",\n-                                        \"value\": \"full\"\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\": \"Build the Query from separate JSON objects.\",\n-                                        \"displayName\": \"BUILD_QUERY\",\n-                                        \"value\": \"build\"\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\": \"full\",\n-                                \"description\": \"How the JSON Query will be defined for use by the processor.\",\n-                                \"displayName\": \"Query Definition Style\",\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\": \"el-rest-query-definition-style\",\n+                                \"name\": \"result-contents\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-script\": {\n+                            \"result-record-path\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"build\"\n+                                            \"use-property\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Query Definition Style\",\n-                                        \"propertyName\": \"el-rest-query-definition-style\"\n+                                        \"propertyDisplayName\": \"Record Update Strategy\",\n+                                        \"propertyName\": \"record-update-strategy\"\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+                                \"description\": \"A RecordPath that points to the field whose value should be updated with whatever value is returned from the Lookup Service. If not specified, the value that is returned from the Lookup Service will be ignored, except for determining whether the FlowFile should be routed to the 'matched' or 'unmatched' Relationship.\",\n+                                \"displayName\": \"Result RecordPath\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"el-rest-script\",\n+                                \"name\": \"result-record-path\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"el-rest-type\": {\n-                                \"description\": \"The type of this document (used by Elasticsearch for indexing and searching).\",\n-                                \"displayName\": \"Type\",\n+                            \"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\": \"el-rest-type\",\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\": \"If the \\\"by query\\\" operation succeeds, and a flowfile was read, it will be 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\": \"If the \\\"by query\\\" operation fails, and a flowfile was read, it will be sent 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-                                \"description\": \"All flowfiles that fail due to server/cluster availability go to this relationship.\",\n-                                \"name\": \"retry\"\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-                            \"elastic\",\n-                            \"elasticsearch\",\n-                            \"elasticsearch5\",\n-                            \"elasticsearch6\",\n-                            \"elasticsearch7\",\n-                            \"elasticsearch8\",\n-                            \"query\",\n-                            \"update\"\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.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The amount of time that it took to complete the update operation in ms.\",\n-                                \"name\": \"elasticsearch.update.took\"\n+                                \"description\": \"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 provided by Elasticsearch if there is an error running the update.\",\n-                                \"name\": \"elasticsearch.update.error\"\n+                                \"description\": \"The number of records in the FlowFile\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-aws-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": 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-M4\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-expiration\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"cache-size\": {\n-                                \"defaultValue\": \"1000\",\n-                                \"description\": \"Specifies how many Schemas should be cached from the Schema Registry\",\n-                                \"displayName\": \"Cache Size\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"cache-size\",\n-                                \"required\": true,\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+                            \"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-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. If set, it supersedes proxy settings configured per component. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"region\": {\n+                            \"Compression 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+                                        \"description\": \"\",\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\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\": \"\",\n+                                        \"displayName\": \"1\",\n+                                        \"value\": \"1\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"2\",\n+                                        \"value\": \"2\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-east-1\",\n-                                        \"displayName\": \"Asia Pacific (Hong Kong)\",\n-                                        \"value\": \"ap-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"3\",\n+                                        \"value\": \"3\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-south-2\",\n-                                        \"displayName\": \"Asia Pacific (Hyderabad)\",\n-                                        \"value\": \"ap-south-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"4\",\n+                                        \"value\": \"4\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"5\",\n+                                        \"value\": \"5\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"6\",\n+                                        \"value\": \"6\"\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                        \"description\": \"\",\n+                                        \"displayName\": \"7\",\n+                                        \"value\": \"7\"\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\": \"\",\n+                                        \"displayName\": \"8\",\n+                                        \"value\": \"8\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"9\",\n+                                        \"value\": \"9\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"1\",\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+                                            \"ZIP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n                                     }\n                                 ],\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\": \"region\",\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+                                \"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\": \"schema-registry-name\",\n+                                \"name\": \"Compression Level\",\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-M4\"\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-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"avro\",\n-                            \"aws\",\n-                            \"glue\",\n-                            \"registry\",\n-                            \"schema\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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-                            \"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+                            \"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\": \"Assume Role ARN\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Correlation Attribute Name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Assume Role Session Name\": {\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-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\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+                                \"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\": \"Assume Role Session Name\",\n+                                \"name\": \"Delimiter Strategy\",\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+                            \"Demarcator File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\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\": \"Credentials File\",\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+                                        \"TEXT\",\n                                         \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"Secret Key\": {\n-                                \"description\": \"\",\n-                                \"displayName\": \"Secret Access Key\",\n+                            \"Footer File\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Secret Key\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Footer File\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\n-                            \"Session Time\": {\n-                                \"defaultValue\": \"3600\",\n+                            \"Header File\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Binary Concatenation\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\n+                                    },\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Filename\",\n+                                            \"Text\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Delimiter Strategy\",\n+                                        \"propertyName\": \"Delimiter Strategy\"\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+                                \"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\": \"Session Time\",\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-                            \"anonymous-credentials\": {\n+                            \"Keep Path\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"If true, uses Anonymous credentials\",\n-                                \"displayName\": \"Use Anonymous Credentials\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"anonymous-credentials\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"assume-role-external-id\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"ZIP\",\n+                                            \"TAR\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\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+                                \"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\": \"assume-role-external-id\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Path\",\n+                                \"required\": true,\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+                            \"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\": \"assume-role-proxy-host\",\n+                                \"name\": \"Max Bin Age\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-proxy-port\": {\n+                            \"Maximum Group Size\": {\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\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+                                \"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\": \"assume-role-proxy-port\",\n+                                \"name\": \"Maximum Group Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-ssl-context-service\": {\n+                            \"Maximum Number of Entries\": {\n+                                \"defaultValue\": \"1000\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"SSL Context Service used when connecting to the STS Endpoint.\",\n-                                \"displayName\": \"Assume Role SSL Context Service\",\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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Maximum Number of Entries\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"assume-role-sts-endpoint\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\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+                            \"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\": \"assume-role-sts-endpoint\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum number of Bins\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-sts-region\": {\n+                            \"Merge Format\": {\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 : eu-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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 : 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+                                        \"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\": \"AWS Region Code : ap-southeast-3\",\n-                                        \"displayName\": \"Asia Pacific (Jakarta)\",\n-                                        \"value\": \"ap-southeast-3\"\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\": \"AWS Region Code : ap-southeast-4\",\n-                                        \"displayName\": \"Asia Pacific (Melbourne)\",\n-                                        \"value\": \"ap-southeast-4\"\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\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\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\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\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\": \"AWS Region Code : cn-northwest-1\",\n-                                        \"displayName\": \"China (Ningxia)\",\n-                                        \"value\": \"cn-northwest-1\"\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\": \"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+                                        \"description\": \"The Avro contents of all FlowFiles will be concatenated together into a single FlowFile\",\n+                                        \"displayName\": \"Avro\",\n+                                        \"value\": \"Avro\"\n                                     }\n                                 ],\n-                                \"description\": \"The AWS Security Token Service (STS) region\",\n-                                \"displayName\": \"Assume Role STS Region\",\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\": \"assume-role-sts-region\",\n-                                \"required\": false,\n+                                \"name\": \"Merge Format\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"assume-role-sts-signer-override\": {\n+                            \"Merge Strategy\": {\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+                                        \"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\": \"Custom Signature\",\n-                                        \"value\": \"CustomSignerType\"\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\": \"Default Signature\",\n+                                \"defaultValue\": \"Bin-Packing Algorithm\",\n+                                \"description\": \"Specifies the algorithm used to merge content. The 'Defragment' algorithm combines fragments that are associated by attributes back into a single cohesive FlowFile. The 'Bin-Packing Algorithm' generates a FlowFile populated by arbitrarily chosen FlowFiles\",\n+                                \"displayName\": \"Merge Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Merge Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Minimum Group Size\": {\n+                                \"defaultValue\": \"0 B\",\n                                 \"dependencies\": [\n                                     {\n-                                        \"propertyDisplayName\": \"Assume Role ARN\",\n-                                        \"propertyName\": \"Assume Role ARN\"\n+                                        \"dependentValues\": [\n+                                            \"Bin-Packing Algorithm\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\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\": \"The minimum size for the bundle\",\n+                                \"displayName\": \"Minimum Group Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"assume-role-sts-signer-override\",\n-                                \"required\": false,\n+                                \"name\": \"Minimum Group Size\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"Minimum Number of Entries\": {\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"Bin-Packing Algorithm\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"Merge Strategy\",\n+                                        \"propertyName\": \"Merge Strategy\"\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 minimum number of files to include in a bundle\",\n+                                \"displayName\": \"Minimum Number of Entries\",\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\": \"Minimum Number of Entries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n+                            \"Tar Modified Time\": {\n+                                \"defaultValue\": \"${file.lastModifiedTime}\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"TAR\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Assume Role STS Signer Override\",\n-                                        \"propertyName\": \"assume-role-sts-signer-override\"\n+                                        \"propertyDisplayName\": \"Merge Format\",\n+                                        \"propertyName\": \"Merge Format\"\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\": \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"custom-signer-module-location\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Tar Modified Time\",\n                                 \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n                                 \"sensitive\": false\n                             },\n-                            \"default-credentials\": {\n+                            \"mergecontent-metadata-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"default-credentials\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"profile-name\",\n-                                \"required\": false,\n+                                \"name\": \"mergecontent-metadata-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"readsAttributes\": [\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-M4\"\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-                                \"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-M4\"\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates the order in which the fragments should be assembled. This attribute must be present on all FlowFiles when using the Defragment Merge Strategy and must be a unique (i.e., unique across all FlowFiles that have the same value for the \\\"fragment.identifier\\\" attribute) integer between 0 and the value of the fragment.count attribute. If two or more FlowFiles have the same value for the \\\"fragment.identifier\\\" attribute and the same value for the \\\"fragment.index\\\" attribute, the first FlowFile processed will be accepted and subsequent FlowFiles will not be accepted into the Bin.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute indicates how many FlowFiles should be expected in the given bundle. At least one FlowFile must have this attribute in the bundle. If multiple FlowFiles contain the \\\"fragment.count\\\" attribute in a given bundle, all must have the same value.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute must be present on all FlowFiles with the same value for the fragment.identifier attribute. All FlowFiles in the same bundle must have the same value for this attribute. The value of this attribute will be used for the filename of the completed merged FlowFile.\",\n+                                \"name\": \"segment.original.filename\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Format> property is set to TAR. The value of this attribute must be 3 characters; each character must be in the range 0 to 7 (inclusive) and indicates the file permissions that should be used for the FlowFile's TAR entry. If this attribute is missing or has an invalid value, the default value of 644 will be used\",\n+                                \"name\": \"tar.permissions\"\n                             }\n                         ],\n-                        \"restricted\": true,\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+                                \"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-                            \"aws\",\n-                            \"credentials\",\n-                            \"provider\"\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-                        \"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-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.standard.MergeContent\",\n+                        \"typeDescription\": \"Merges a Group of FlowFiles together based on a user-defined strategy and packages them into a single FlowFile. It is recommended that the Processor be configured with only a single incoming connection, as Group of FlowFiles will not be created from FlowFiles in different connections. This processor updates the mime.type attribute as appropriate. NOTE: this processor should NOT be configured with Cron Driven for the Scheduling Strategy.\",\n+                        \"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-M4\",\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+                            },\n+                            {\n+                                \"description\": \"The age of the bin, in milliseconds, when it was merged and output. Effectively this is the greatest amount of time that any FlowFile in this bundle remained waiting in this processor before it was output\",\n+                                \"name\": \"merge.bin.age\"\n+                            },\n+                            {\n+                                \"description\": \"UUID of the merged flow file that will be added to the original flow files attributes.\",\n+                                \"name\": \"merge.uuid\"\n+                            },\n+                            {\n+                                \"description\": \"This processor allows for several thresholds to be configured for merging FlowFiles. This attribute indicates which of the Thresholds resulted in the FlowFiles being merged. For an explanation of each of the possible values and their meanings, see the Processor's Usage / documentation and see the 'Additional Details' page.\",\n+                                \"name\": \"merge.reason\"\n+                            }\n+                        ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"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-                            \"encryption-strategy\": {\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+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"multiProcessorUseCases\": [\n+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"Use server-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Server-side KMS\",\n-                                        \"value\": \"SSE_KMS\"\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\": \"Use server-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Server-side Customer Key\",\n-                                        \"value\": \"SSE_C\"\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+                            }\n+                        ],\n+                        \"primaryNodeOnly\": false,\n+                        \"propertyDescriptors\": {\n+                            \"Attribute Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use client-side, KMS key to perform encryption.\",\n-                                        \"displayName\": \"Client-side KMS\",\n-                                        \"value\": \"CSE_KMS\"\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\": \"Use client-side, customer-supplied key to perform encryption.\",\n-                                        \"displayName\": \"Client-side Customer Key\",\n-                                        \"value\": \"CSE_C\"\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\": \"NONE\",\n-                                \"description\": \"Strategy to use for S3 data encryption and decryption.\",\n-                                \"displayName\": \"Encryption Strategy\",\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\": \"encryption-strategy\",\n+                                \"name\": \"Attribute Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"key-id-or-key-material\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"correlation-attribute-name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\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+                            \"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\": \"kms-region\",\n+                                \"name\": \"max-bin-age\",\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-M4\"\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-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\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+                            },\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\": \"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-M4\"\n-                                }\n+                                \"name\": \"max-bin-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max.bin.count\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"merge-strategy\": {\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+                                        \"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\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Combines fragments that are associated by attributes back into a single cohesive FlowFile. If using this strategy, all FlowFiles must have the attributes <fragment.identifier> and <fragment.count>. All FlowFiles with the same value for \\\"fragment.identifier\\\" will be grouped together. All FlowFiles in this group must have the same value for the \\\"fragment.count\\\" attribute. The ordering of the Records that are output is not guaranteed.\",\n+                                        \"displayName\": \"Defragment\",\n+                                        \"value\": \"Defragment\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"merge-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.fileresource.service.api.FileResourceService\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"aws-communications-timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            },\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\": \"aws-communications-timeout\",\n+                                \"name\": \"min-bin-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"aws-credentials-provider-service\": {\n-                                \"description\": \"Service used to obtain an Amazon Web Services Credentials Provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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+                                \"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\": \"aws-credentials-provider-service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\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.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"aws-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\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"aws-region\",\n+                                \"name\": \"record-writer\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"aws-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\": \"aws-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.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            },\n-                            \"secret-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on Secret Name that identifies Secrets whose parameters should be fetched. Any secrets whose names do not match this pattern will not be fetched.\",\n-                                \"displayName\": \"Secret Name Pattern\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"secret-name-pattern\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. All FlowFiles with the same value for this attribute will be bundled together.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"Applicable only if the <Merge Strategy> property is set to Defragment. This attribute 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-                            \"aws\",\n-                            \"manager\",\n-                            \"secrets\",\n-                            \"secretsmanager\"\n+                            \"content\",\n+                            \"correlation\",\n+                            \"event\",\n+                            \"merge\",\n+                            \"record\",\n+                            \"stream\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.aws.AwsSecretsManagerParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from AWS SecretsManager.  Each secret becomes a Parameter group, which can map to a Parameter Context, with key/value pairs in the secret mapping to Parameters in the group.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\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-M4\",\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-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75293,448 +75713,96 @@\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-M4\"\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+                            \"End Offset\": {\n+                                \"defaultValue\": \"0 B\",\n+                                \"description\": \"Number of bytes removed at the end of the file.\",\n+                                \"displayName\": \"End Offset\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Namespace\",\n+                                \"name\": \"End Offset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Remove All Content\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Remove All Content\",\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-M4\"\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-M4\"\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+                            \"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\": \"sum\",\n-                                \"required\": false,\n+                                \"name\": \"Start Offset\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Processed flowfiles.\",\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+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"cloudwatch\",\n-                            \"metrics\",\n-                            \"publish\",\n-                            \"put\"\n+                            \"binary\",\n+                            \"discard\",\n+                            \"keep\"\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -75747,514 +75815,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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"Activity Restored Message\": {\n+                                \"defaultValue\": \"Activity restored at time: ${now():format('yyyy/MM/dd HH:mm:ss')} after being inactive for ${inactivityDurationMillis:toNumber():divide(60000)} minutes\",\n+                                \"description\": \"The message that will be the content of FlowFiles that are sent to 'activity.restored' relationship\",\n+                                \"displayName\": \"Activity Restored Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Activity Restored Message\",\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-M4\"\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+                            \"Continually Send Messages\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will send inactivity indicator continually every Threshold Duration amount of time until activity is restored; if false, will send an indicator only when the flow first becomes inactive\",\n+                                \"displayName\": \"Continually Send Messages\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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+                                \"name\": \"Continually Send Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value Type\": {\n+                            \"Copy Attributes\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, will copy all flow file attributes from the flow file that resumed activity to the newly created indicator flow file\",\n+                                \"displayName\": \"Copy Attributes\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hash Key Value Type\",\n+                                \"name\": \"Copy Attributes\",\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+                            \"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\": \"Range Key Value\",\n-                                \"required\": false,\n+                                \"name\": \"Inactivity Message\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Range Key Value Type\": {\n+                            \"Monitoring Scope\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"node\",\n+                                        \"value\": \"node\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"cluster\",\n+                                        \"value\": \"cluster\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\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\": \"Range Key Value Type\",\n+                                \"name\": \"Monitoring Scope\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Reporting Node\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"all\",\n+                                        \"value\": \"all\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"primary\",\n+                                        \"value\": \"primary\"\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+                                            \"cluster\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Monitoring Scope\",\n+                                        \"propertyName\": \"Monitoring Scope\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"description\": \"Specify which node should send notification flow-files to inactive and activity.restored relationships. With 'all', every node in this cluster send notification flow-files. 'primary' means flow-files will be sent only from a primary node. If NiFi is running as standalone mode, this should be set as 'all', even if it's 'primary', NiFi act as 'all'.\",\n+                                \"displayName\": \"Reporting Node\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Reporting Node\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Reset State on Restart\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"Table Name\": {\n-                                \"description\": \"The DynamoDB table name\",\n-                                \"displayName\": \"Table Name\",\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\": \"Table Name\",\n+                                \"name\": \"Threshold Duration\",\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+                            \"Wait for Activity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"When the processor gets started or restarted, if set to true, only send an inactive indicator if there had been activity beforehand. Otherwise send an inactive indicator even if there had not been activity beforehand.\",\n+                                \"displayName\": \"Wait for Activity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"Wait for Activity\",\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.aws.dynamodb.GetDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDB\",\n-                            \"org.apache.nifi.processors.aws.dynamodb.PutDynamoDBRecord\"\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\": \"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+                                \"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\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All incoming FlowFiles are routed to success\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"This relationship is used to transfer an Activity Restored indicator when FlowFiles are routing to 'success' following a period of inactivity\",\n+                                \"name\": \"activity.restored\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": true,\n+                        \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"DynamoDB\",\n-                            \"Remove\"\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.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+                        \"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-M4\",\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+                                \"description\": \"The time at which Inactivity began, in the form of milliseconds since Epoch\",\n+                                \"name\": \"inactivityStartMillis\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The number of milliseconds that the inactivity has spanned\",\n+                                \"name\": \"inactivityDurationMillis\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76267,528 +76075,262 @@\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+                            \"attribute-cache-regex\": {\n+                                \"description\": \"Any attributes whose names match this regex will be stored in the distributed cache to be copied to any FlowFiles released from a corresponding Wait processor.  Note that the uuid attribute will not be cached regardless of this value.  If blank, no attributes will be cached.\",\n+                                \"displayName\": \"Attribute Cache Regex\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\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+                                \"name\": \"attribute-cache-regex\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"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+                                \"name\": \"distributed-cache-service\",\n                                 \"required\": true,\n-                                \"sensitive\": false\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"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\": \"Hash Key Value\",\n+                                \"name\": \"release-signal-id\",\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+                            \"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\": \"Hash Key Value Type\",\n+                                \"name\": \"signal-buffer-count\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Json Document attribute\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"signal-counter-delta\",\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+                            \"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\": \"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+                                \"name\": \"signal-counter-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClientService\",\n+                            \"org.apache.nifi.distributed.cache.server.map.DistributedMapCacheServer\",\n+                            \"org.apache.nifi.processors.standard.Wait\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles where the release signal has been successfully entered in the cache will be routed to this relationship\",\n+                                \"name\": \"success\"\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"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+                            \"map\",\n+                            \"notify\",\n+                            \"release\",\n+                            \"signal\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All FlowFiles will have an attribute 'notified'. The value of this attribute is true, is the FlowFile is notified, otherwise false.\",\n+                                \"name\": \"notified\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                                        \"description\": \"AWS Region Code : aws-cn-global\",\n-                                        \"displayName\": \"aws-cn-global\",\n-                                        \"value\": \"aws-cn-global\"\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\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\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\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\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+                                    }\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+                                ],\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+                            {\n+                                \"configurations\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\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-                                        \"description\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\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-                                \"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+                                \"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\": \"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-M4\"\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+                                \"name\": \"max-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\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-M4\"\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+                            \"org.apache.nifi.processors.standard.MergeContent\",\n+                            \"org.apache.nifi.processors.standard.UnpackContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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+                                \"description\": \"The FlowFiles that were used to create the package are sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"The packaged FlowFile is sent to this relationship\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"DynamoDB\",\n-                            \"Fetch\",\n-                            \"Get\"\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.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.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-M4\",\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+                                \"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-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -76801,545 +76343,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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\n+                            \"ACCEPT_EMPTY_EXTENSIONS\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to true, empty extensions will be accepted and will be associated to a null value.\",\n+                                \"displayName\": \"Accept empty extensions\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\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+                                \"name\": \"ACCEPT_EMPTY_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"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+                                \"name\": \"APPEND_RAW_MESSAGE_TO_JSON\",\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+                            \"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\": \"Hash Key Value\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"DATETIME_REPRESENTATION\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hash Key Value Type\": {\n+                            \"FIELDS_DESTINATION\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"flowfile-content\",\n+                                        \"value\": \"flowfile-content\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"flowfile-attribute\",\n+                                        \"value\": \"flowfile-attribute\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The hash key value type of the item\",\n-                                \"displayName\": \"Hash Key Value Type\",\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\": \"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+                                \"name\": \"FIELDS_DESTINATION\",\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+                            \"INCLUDE_CUSTOM_EXTENSIONS\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"string\",\n-                                        \"value\": \"string\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"number\",\n-                                        \"value\": \"number\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"string\",\n-                                \"description\": \"The range key value type of the item\",\n-                                \"displayName\": \"Range Key Value Type\",\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\": \"Range Key Value Type\",\n+                                \"name\": \"INCLUDE_CUSTOM_EXTENSIONS\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"TIME_REPRESENTATION\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"UTC\",\n+                                        \"value\": \"UTC\"\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\": \"\",\n+                                        \"displayName\": \"Local Timezone (system Default)\",\n+                                        \"value\": \"Local Timezone (system Default)\"\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+                                \"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\": \"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-M4\"\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+                                \"name\": \"TIME_REPRESENTATION\",\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-M4\"\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+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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+                                \"description\": \"Any FlowFile that is successfully parsed as a CEF message will be transferred to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\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-                        \"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+                            \"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.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+                        \"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-M4\",\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+                                \"description\": \"The version of the CEF message.\",\n+                                \"name\": \"cef.header.version\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n+                                \"description\": \"The Device Vendor of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVendor\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n+                                \"description\": \"The Device Product of the CEF message.\",\n+                                \"name\": \"cef.header.deviceProduct\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n+                                \"description\": \"The Device Version of the CEF message.\",\n+                                \"name\": \"cef.header.deviceVersion\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n+                                \"description\": \"The Device Event Class ID of the CEF message.\",\n+                                \"name\": \"cef.header.deviceEventClassId\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"The name of the CEF message.\",\n+                                \"name\": \"cef.header.name\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The severity of the CEF message.\",\n+                                \"name\": \"cef.header.severity\"\n                             },\n                             {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\n+                                \"description\": \"The key and value generated by the parsing of the message.\",\n+                                \"name\": \"cef.extension.*\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -77352,551 +76553,279 @@\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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n+                                \"name\": \"success\"\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                \"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\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"system\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\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-M4\"\n-                                }\n+                            {\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\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+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\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\": \"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+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\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+                            {\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n+                            },\n+                            {\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n+                            },\n+                            {\n+                                \"description\": \"The body of the Syslog message, everything after the hostname.\",\n+                                \"name\": \"syslog.body\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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\": \"partition-key-field\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"partition-key-strategy\": {\n+                            \"include_policy\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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. If set, it supersedes proxy settings configured per component.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"proxy-configuration-service\",\n+                                \"name\": \"include_policy\",\n                                 \"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-M4\"\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-M4\"\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+                            \"nil_policy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The processor will not assign sort key to the inserted Items.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"The missing field will not have an attribute added.\",\n+                                        \"displayName\": \"OMIT\",\n+                                        \"value\": \"OMIT\"\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+                                        \"description\": \"The missing field will have an empty attribute added.\",\n+                                        \"displayName\": \"NULL\",\n+                                        \"value\": \"NULL\"\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+                                        \"description\": \"The missing field will have an attribute added with the value of '-'.\",\n+                                        \"displayName\": \"DASH\",\n+                                        \"value\": \"DASH\"\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+                                \"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\": \"sort-key-strategy\",\n+                                \"name\": \"nil_policy\",\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+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\",\n+                            \"org.apache.nifi.processors.standard.PutSyslog\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\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+                                \"description\": \"Any FlowFile that is successfully parsed as a Syslog message will be to this Relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\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-                        \"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+                            \"attributes\",\n+                            \"event\",\n+                            \"logs\",\n+                            \"message\",\n+                            \"syslog\",\n+                            \"syslog5424\",\n+                            \"system\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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+                        \"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-M4\",\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+                                \"description\": \"The priority of the Syslog message.\",\n+                                \"name\": \"syslog.priority\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB unprocessed keys\",\n-                                \"name\": \"dynamodb.key.error.unprocessed\"\n+                                \"description\": \"The severity of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.severity\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB range key error\",\n-                                \"name\": \"dynmodb.range.key.value.error\"\n+                                \"description\": \"The facility of the Syslog message derived from the priority.\",\n+                                \"name\": \"syslog.facility\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB key not found\",\n-                                \"name\": \"dynamodb.key.error.not.found\"\n+                                \"description\": \"The optional version from the Syslog message.\",\n+                                \"name\": \"syslog.version\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB exception message\",\n-                                \"name\": \"dynamodb.error.exception.message\"\n+                                \"description\": \"The timestamp of the Syslog message.\",\n+                                \"name\": \"syslog.timestamp\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error code\",\n-                                \"name\": \"dynamodb.error.code\"\n+                                \"description\": \"The hostname or IP address of the Syslog message.\",\n+                                \"name\": \"syslog.hostname\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error message\",\n-                                \"name\": \"dynamodb.error.message\"\n+                                \"description\": \"The appname of the Syslog message.\",\n+                                \"name\": \"syslog.appname\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error service\",\n-                                \"name\": \"dynamodb.error.service\"\n+                                \"description\": \"The procid of the Syslog message.\",\n+                                \"name\": \"syslog.procid\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error is retryable\",\n-                                \"name\": \"dynamodb.error.retryable\"\n+                                \"description\": \"The messageid the Syslog message.\",\n+                                \"name\": \"syslog.messageid\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error request id\",\n-                                \"name\": \"dynamodb.error.request.id\"\n+                                \"description\": \"Multiple entries per structuredData of the Syslog message.\",\n+                                \"name\": \"syslog.structuredData\"\n                             },\n                             {\n-                                \"description\": \"DynamoDB error status code\",\n-                                \"name\": \"dynamodb.error.status.code\"\n+                                \"description\": \"The hostname of the Syslog server that sent the message.\",\n+                                \"name\": \"syslog.sender\"\n                             },\n                             {\n-                                \"description\": \"IO exception message on creating item\",\n-                                \"name\": \"dynamodb.item.io.error\"\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-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -77904,380 +76833,174 @@\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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider 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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"record-reader\",\n                                 \"required\": true,\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.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                            \"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\": \"Region\",\n+                                \"name\": \"record-writer\",\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+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\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 are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that are successfully partitioned will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"If a FlowFile cannot be 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\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"firehose\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n+                            \"bin\",\n+                            \"group\",\n+                            \"organize\",\n+                            \"partition\",\n+                            \"record\",\n+                            \"recordpath\",\n+                            \"rpath\",\n+                            \"segment\",\n+                            \"split\"\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Error message on posting message to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.message\"\n+                                \"description\": \"The number of records in an outgoing FlowFile\",\n+                                \"name\": \"record.count\"\n                             },\n                             {\n-                                \"description\": \"Error code for the message when posting to AWS Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.error.code\"\n+                                \"description\": \"The MIME Type that the configured Record Writer indicates is appropriate\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"Record id of the message posted to Kinesis Firehose\",\n-                                \"name\": \"aws.kinesis.firehose.record.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\": \"A one-up number that indicates the ordering of the partitioned FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of partitioned FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            },\n+                            {\n+                                \"description\": \"For each dynamic property that is added, an attribute may be added to the FlowFile. See the description for Dynamic Properties for more information.\",\n+                                \"name\": \"<dynamic property name>\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -78285,578 +77008,577 @@\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+                        \"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+                            \"Data Record Path\": {\n+                                \"description\": \"If specified, this property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to the database instead of sending the entire incoming Record. If not specified, the entire incoming Record will be published to the database.\",\n+                                \"displayName\": \"Data Record Path\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"Data Record Path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"Statement Type Record Path\",\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+                            \"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\": \"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\": \"database-session-autocommit\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\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\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO WEST\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\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\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\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+                            \"put-db-record-allow-multiple-statements\": {\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+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\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\": \"put-db-record-allow-multiple-statements\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"put-db-record-binary-format\": {\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\": \"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\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"String values for binary columns contain the original value in hexadecimal format\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\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\": \"String values for binary columns contain the original value in Base64 encoded format\",\n+                                        \"displayName\": \"Base64\",\n+                                        \"value\": \"Base64\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\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-                            \"amazon-kinesis-stream-application-name\": {\n-                                \"description\": \"The Kinesis stream reader application name.\",\n-                                \"displayName\": \"Application Name\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-application-name\",\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-M4\"\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-                            \"amazon-kinesis-stream-checkpoint-interval\": {\n-                                \"defaultValue\": \"3 secs\",\n-                                \"description\": \"Interval between Kinesis checkpoints\",\n-                                \"displayName\": \"Checkpoint Interval\",\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\": \"amazon-kinesis-stream-checkpoint-interval\",\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-                            \"amazon-kinesis-stream-cloudwatch-flag\": {\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\": \"Whether to report Kinesis usage metrics to CloudWatch.\",\n-                                \"displayName\": \"Report Metrics to CloudWatch\",\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\": \"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+                                \"name\": \"put-db-record-quoted-identifiers\",\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+                            \"put-db-record-quoted-table-identifiers\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Enabling this option will cause the table name to be quoted to support the use of special characters in the table name.\",\n+                                \"displayName\": \"Quote Table Identifiers\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-failover-timeout\",\n-                                \"required\": true,\n+                                \"name\": \"put-db-record-quoted-table-identifiers\",\n+                                \"required\": false,\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+                            \"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\": \"amazon-kinesis-stream-graceful-shutdown-timeout\",\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-M4\"\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-                            \"amazon-kinesis-stream-initial-position\": {\n+                            \"put-db-record-statement-type\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"UPDATE\",\n+                                        \"value\": \"UPDATE\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"INSERT\",\n+                                        \"value\": \"INSERT\"\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+                                        \"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-                                \"defaultValue\": \"LATEST\",\n-                                \"description\": \"Initial position to read Kinesis streams.\",\n-                                \"displayName\": \"Initial Stream Position\",\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\": \"amazon-kinesis-stream-initial-position\",\n+                                \"name\": \"put-db-record-statement-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"amazon-kinesis-stream-position-timestamp\": {\n-                                \"dependencies\": [\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-                                        \"dependentValues\": [\n-                                            \"AT_TIMESTAMP\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Initial Stream Position\",\n-                                        \"propertyName\": \"amazon-kinesis-stream-initial-position\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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+                                \"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\": \"amazon-kinesis-stream-position-timestamp\",\n+                                \"name\": \"put-db-record-translate-field-names\",\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+                            \"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\": \"amazon-kinesis-stream-record-reader\",\n+                                \"name\": \"put-db-record-unmatched-column-behavior\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"amazon-kinesis-stream-record-writer\",\n+                                \"name\": \"put-db-record-unmatched-field-behavior\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"amazon-kinesis-stream-retry-count\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"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+                                \"name\": \"rollback-on-failure\",\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+                            \"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\": \"kinesis-stream-name\",\n+                                \"name\": \"table-schema-cache-size\",\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-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.kinesis.stream.PutKinesisStream\"\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If 'Use statement.type Attribute' is selected for the Statement Type property, the value of this attribute will be used to determine the type of statement (INSERT, UPDATE, DELETE, SQL, etc.) to generate and execute.\",\n+                                \"name\": \"statement.type\"\n+                            }\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success 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\": true,\n+                        \"supportsDynamicProperties\": false,\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+                            \"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.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+                        \"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-M4\",\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+                                \"description\": \"If an error occurs during processing, the flow file will be routed to failure or retry, and this attribute will be populated with the cause of the error.\",\n+                                \"name\": \"putdatabaserecord.error\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -78869,392 +77591,122 @@\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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Cache Entry Identifier\",\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+                            \"Cache update strategy\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"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\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"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+                                \"name\": \"Cache update strategy\",\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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"Distributed Cache Service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\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.aws.kinesis.stream.ConsumeKinesisStream\"\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\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Any FlowFile that is successfully inserted into cache will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"amazon\",\n-                            \"aws\",\n-                            \"kinesis\",\n-                            \"put\",\n-                            \"stream\"\n+                            \"cache\",\n+                            \"distributed\",\n+                            \"map\",\n+                            \"put\"\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+                        \"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-M4\",\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+                                \"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\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79262,391 +77714,362 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Attach File\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Amazon Lambda Name\": {\n-                                \"description\": \"The Lambda Function Name\",\n-                                \"displayName\": \"Amazon Lambda Name\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Name\",\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-                            \"Amazon Lambda Qualifier (version)\": {\n-                                \"defaultValue\": \"$LATEST\",\n-                                \"description\": \"The Lambda Function Version\",\n-                                \"displayName\": \"Amazon Lambda Qualifier (version)\",\n+                            \"From\": {\n+                                \"description\": \"Specifies the Email address to use as the sender. Comma separated sequence of addresses following RFC822 syntax.\",\n+                                \"displayName\": \"From\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Amazon Lambda Qualifier (version)\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"From\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"Include All Attributes In Message\",\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+                            \"Message\": {\n+                                \"description\": \"The body of the email message\",\n+                                \"displayName\": \"Message\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Endpoint Override URL\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Message\",\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                            \"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-                                        \"description\": \"AWS Region Code : aws-iso-b-global\",\n-                                        \"displayName\": \"aws-iso-b-global\",\n-                                        \"value\": \"aws-iso-b-global\"\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                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"Use password\",\n+                                        \"displayName\": \"Use Password\",\n+                                        \"value\": \"password-based-authorization-mode\"\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\": \"Use OAuth2 to acquire access token\",\n+                                        \"displayName\": \"Use OAuth2\",\n+                                        \"value\": \"oauth-based-authorization-mode\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"authorization-mode\",\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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\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+                                ],\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.oauth2.OAuth2AccessTokenProvider\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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-                            \"amazon\",\n-                            \"aws\",\n-                            \"lambda\",\n-                            \"put\"\n+                            \"email\",\n+                            \"notify\",\n+                            \"put\",\n+                            \"smtp\"\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+                        \"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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -79654,307 +78077,432 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"The command specified in the key will be executed before doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"pre.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            },\n+                            {\n+                                \"description\": \"The command specified in the key will be executed after doing a put.  You may add these optional properties  to send any commands to the FTP server before the file is actually transferred (before the put command). This option is only available for the PutFTP processor, as only FTP has this functionality. This is essentially the same as sending quote commands to an FTP server from the command line.  While this is the same as sending a quote command, it is very important that you leave off the .\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"post.cmd._____\",\n+                                \"value\": \"Not used\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n+                        \"inputRequirement\": \"INPUT_REQUIRED\",\n                         \"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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"Batch 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-                                \"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+                            \"Conflict Resolution\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n+                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n+                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\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\": \"Conflict Resolution\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Active\",\n+                                        \"value\": \"Active\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Passive\",\n+                                        \"value\": \"Passive\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Passive\",\n+                                \"description\": \"The FTP Connection Mode\",\n+                                \"displayName\": \"Connection Mode\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Mode\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Directory\",\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+                            \"Dot Rename\": {\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 : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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+                                \"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+                            \"Internal Buffer Size\": {\n+                                \"defaultValue\": \"16KB\",\n+                                \"description\": \"Set the internal buffer size for buffered data streams\",\n+                                \"displayName\": \"Internal Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Internal Buffer Size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Last Modified Time\": {\n+                                \"description\": \"The lastModifiedTime to assign to the file after transferring it. If not set, the lastModifiedTime will not be changed. Format must be yyyy-MM-dd'T'HH:mm:ssZ. You may also use expression language such as ${file.lastModifiedTime}. If the value is invalid, the processor will not be invalid but will fail to change lastModifiedTime of the file.\",\n+                                \"displayName\": \"Last Modified Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Last Modified Time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password for the user account\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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+                                \"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\": \"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\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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\": \"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\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"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+                                \"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+                            \"Transfer Mode\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"Binary\",\n+                                        \"value\": \"Binary\"\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\": \"\",\n+                                        \"displayName\": \"ASCII\",\n+                                        \"value\": \"ASCII\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"Transfer Mode\",\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+                            \"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-                                \"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-M4\"\n-                                }\n+                                \"name\": \"Use Compression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n+                            \"Username\": {\n+                                \"description\": \"Username\",\n+                                \"displayName\": \"Username\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n+                                \"name\": \"Username\",\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                             \"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. 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@@ -79963,75 +78511,59 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.polly.StartAwsPollyJob\"\n+                            \"org.apache.nifi.processors.standard.GetFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n                                 \"name\": \"success\"\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\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"ftp\",\n+                            \"put\",\n+                            \"remote\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.aws.ml.polly.GetAwsPollyJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Polly job.\",\n+                        \"type\": \"org.apache.nifi.processors.standard.PutFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an FTP Server\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80039,355 +78571,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-                            \"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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"fail\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Conflict Resolution Strategy\",\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+                            \"Create Missing Directories\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"Create Missing Directories\",\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+                            \"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\": \"Directory\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Group\": {\n+                                \"description\": \"Sets the group on the output file to the value of this attribute.  You may also use expression language such as ${file.group}.\",\n+                                \"displayName\": \"Group\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Maximum File Count\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"json-payload\",\n+                                \"name\": \"Owner\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Permissions\": {\n+                                \"description\": \"Sets the permissions on the output file to the value of this attribute.  Format must be either UNIX rwxrwxrwx with a - in place of denied permissions (e.g. rw-r--r--) or an octal number (e.g. 644).  You may also use expression language such as ${file.permissions}.\",\n+                                \"displayName\": \"Permissions\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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.aws.ml.polly.GetAwsPollyJobStatus\"\n+                            \"org.apache.nifi.processors.standard.FetchFile\",\n+                            \"org.apache.nifi.processors.standard.GetFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success 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\": \"FlowFiles are routed to failure 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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Polly\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"files\",\n+                            \"filesystem\",\n+                            \"local\",\n+                            \"put\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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+                        \"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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80396,384 +78759,113 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-M4\"\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+                            \"put-record-include-zero-record-results\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"put-record-include-zero-record-results\",\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+                            \"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\": \"SSL Context Service\",\n-                                \"required\": false,\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.ssl.SSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\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.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n                                     \"version\": \"2.0.0-M4\"\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+                                \"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\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"The original FlowFile will be routed to this relationship if the records were transmitted successfully\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile 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-                                \"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-                            \"Textract\"\n+                            \"put\",\n+                            \"record\",\n+                            \"sink\"\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+                        \"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-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -80782,386 +78874,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_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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"Batch 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+                            \"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\": \"Endpoint Override URL\",\n+                                \"name\": \"Ciphers Allowed\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Conflict Resolution\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                        \"description\": \"Remote file is replaced with new file, FlowFile goes to success\",\n+                                        \"displayName\": \"REPLACE\",\n+                                        \"value\": \"REPLACE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-north-1\",\n-                                        \"displayName\": \"Europe (Stockholm)\",\n-                                        \"value\": \"eu-north-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to success\",\n+                                        \"displayName\": \"IGNORE\",\n+                                        \"value\": \"IGNORE\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : eu-central-2\",\n-                                        \"displayName\": \"Europe (Zurich)\",\n-                                        \"value\": \"eu-central-2\"\n+                                        \"description\": \"New file is renamed with a one-up number at the beginning, FlowFile goes to success\",\n+                                        \"displayName\": \"RENAME\",\n+                                        \"value\": \"RENAME\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to reject\",\n+                                        \"displayName\": \"REJECT\",\n+                                        \"value\": \"REJECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"File is not transferred, FlowFile goes to failure\",\n+                                        \"displayName\": \"FAIL\",\n+                                        \"value\": \"FAIL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-central-1\",\n-                                        \"displayName\": \"Middle East (UAE)\",\n-                                        \"value\": \"me-central-1\"\n-                                    },\n+                                        \"description\": \"Do not check for conflict before transfer, FlowFile goes to success or failure\",\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\": \"Conflict Resolution\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Connection Timeout\": {\n+                                \"defaultValue\": \"30 sec\",\n+                                \"description\": \"Amount of time to wait before timing out while creating a connection\",\n+                                \"displayName\": \"Connection Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Connection Timeout\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Directory\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : sa-east-1\",\n-                                        \"displayName\": \"South America (Sao Paulo)\",\n-                                        \"value\": \"sa-east-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-1\",\n-                                        \"displayName\": \"US East (N. Virginia)\",\n-                                        \"value\": \"us-east-1\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether or not the remote directory should be created if it does not exist.\",\n+                                \"displayName\": \"Create Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Create Directory\",\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+                            \"Disable Directory Listing\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : us-east-2\",\n-                                        \"displayName\": \"US East (Ohio)\",\n-                                        \"value\": \"us-east-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If set to 'true', directory listing is not performed prior to create missing directories. By default, this processor executes a directory listing command to see target directory existence before creating missing directories. However, there are situations that you might need to disable the directory listing such as the following. Directory listing might fail with some permission setups (e.g. chmod 100) on a directory. Also, if any other SFTP client created the directory after this processor performed a listing and before a directory creation request by this processor is finished, then an error is returned because the directory already exists.\",\n+                                \"displayName\": \"Disable Directory Listing\",\n+                                \"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\": \"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 : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\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+                                \"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+                            \"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+                            \"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+                                \"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\": \"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\": \"AWS Region Code : us-west-1\",\n-                                        \"displayName\": \"US West (N. California)\",\n-                                        \"value\": \"us-west-1\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-west-2\",\n-                                        \"displayName\": \"US West (Oregon)\",\n-                                        \"value\": \"us-west-2\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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\": \"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\": \"AWS Region Code : aws-global\",\n-                                        \"displayName\": \"aws-global\",\n-                                        \"value\": \"aws-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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+                                        \"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+                                \"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\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"Send Keep Alive On Timeout\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Strict Host Key Checking\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"json-payload\",\n+                                \"name\": \"Temporary Filename\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"textract-type\": {\n+                            \"Use Compression\": {\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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Document Text Detection\",\n-                                        \"value\": \"Document Text Detection\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Document Analysis\",\n-                                \"description\": \"Supported values: \\\"Document Analysis\\\", \\\"Document Text Detection\\\", \\\"Expense Analysis\\\"\",\n-                                \"displayName\": \"Textract 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\": \"textract-type\",\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: 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-M4\"\n+                                }\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.textract.GetAwsTextractJobStatus\"\n+                            \"org.apache.nifi.processors.standard.GetSFTP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n+                                \"description\": \"FlowFiles that are successfully sent will be routed to success\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles that were rejected by the destination system\",\n+                                \"name\": \"reject\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the remote system; failure is usually looped back to this processor\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Textract\"\n+                            \"archive\",\n+                            \"copy\",\n+                            \"egress\",\n+                            \"files\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"sftp\"\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+                        \"type\": \"org.apache.nifi.processors.standard.PutSFTP\",\n+                        \"typeDescription\": \"Sends FlowFiles to an SFTP Server\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81170,379 +79445,236 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The preferred number of FlowFiles to put to the database in a single transaction\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Batch Size\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JDBC Connection Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-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.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Obtain Generated Keys\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If true, any key that is automatically generated by the database will be added to the FlowFile that generated it using the sql.generate.key attribute. This may result in slightly slower performance and is not supported by all databases.\",\n+                                \"displayName\": \"Obtain Generated Keys\",\n                                 \"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\": \"Obtain Generated Keys\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"Support Fragmented Transactions\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n-                                \"required\": true,\n+                                \"name\": \"Support Fragmented Transactions\",\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+                            \"Transaction Timeout\": {\n+                                \"description\": \"If the <Support Fragmented Transactions> property is set to true, specifies how long to wait for all FlowFiles for a particular fragment.identifier attribute to arrive before just transferring all of the FlowFiles with that identifier to the 'failure' relationship\",\n+                                \"displayName\": \"Transaction Timeout\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n+                                \"name\": \"Transaction 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.ssl.SSLContextService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\n+                            \"database-session-autocommit\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"The autocommit mode to set on the database connection being used. If set to false, the operation(s) will be explicitly committed or rolled back (based on success or failure respectively), if set to true the driver/database handles the commit/rollback.\",\n+                                \"displayName\": \"Database Session AutoCommit\",\n+                                \"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\": \"awsTaskId\",\n-                                \"required\": true,\n+                                \"name\": \"putsql-sql-statement\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"rollback-on-failure\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"readsAttributes\": [\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine whether or not two FlowFiles belong to the same transaction.\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine how many FlowFiles are needed to complete the transaction.\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"If the <Support Fragment Transactions> property is true, this attribute is used to determine the order that the FlowFiles in a transaction should be evaluated.\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The type of each Parameter is specified as an integer that represents the JDBC Type of the parameter.\",\n+                                \"name\": \"sql.args.N.type\"\n+                            },\n+                            {\n+                                \"description\": \"Incoming FlowFiles are expected to be parametrized SQL statements. The value of the Parameters are specified as sql.args.1.value, sql.args.2.value, sql.args.3.value, and so on. The type of the sql.args.1.value Parameter is specified by the sql.args.1.type attribute.\",\n+                                \"name\": \"sql.args.N.value\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute is always optional, but default options may not always work for your data. Incoming FlowFiles are expected to be parametrized SQL statements. In some cases a format option needs to be specified, currently this is only applicable for binary data types, dates, times and timestamps. Binary Data Types (defaults to 'ascii') - ascii: each string character in your attribute value represents a single byte. This is the format provided by Avro Processors. base64: the string is a Base64 encoded string that can be decoded to bytes. hex: the string is hex encoded with all letters in upper case and no '0x' at the beginning. Dates/Times/Timestamps - Date, Time and Timestamp formats all support both custom formats or named format ('yyyy-MM-dd','ISO_OFFSET_DATE_TIME') as specified according to java.time.format.DateTimeFormatter. If not specified, a long value input is expected to be an unix epoch (milli seconds from 1970/1/1), or a string value in 'yyyy-MM-dd' format for Date, 'HH:mm:ss.SSS' for Time (some database engines e.g. Derby or MySQL do not support milliseconds and will truncate milliseconds), 'yyyy-MM-dd HH:mm:ss.SSS' for Timestamp is used.\",\n+                                \"name\": \"sql.args.N.format\"\n+                            }\n+                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.StartAwsTranscribeJob\"\n+                            \"org.apache.nifi.processors.standard.ConvertJSONToSQL\"\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+                                \"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\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"A FlowFile is routed to this relationship after the database is successfully updated\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\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-                                \"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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\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.aws.ml.transcribe.GetAwsTranscribeJobStatus\",\n-                        \"typeDescription\": \"Retrieves the current status of an AWS Transcribe job.\",\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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\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-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81551,354 +79683,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_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+                            \"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\": \"AWS Credentials Provider service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\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-                            \"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+                            \"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\": \"Endpoint Override URL\",\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-                            \"Region\": {\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\": \"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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"TCP\",\n+                                        \"value\": \"TCP\"\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\": \"\",\n+                                        \"displayName\": \"UDP\",\n+                                        \"value\": \"UDP\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"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+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"TCP\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Protocol\",\n+                                        \"propertyName\": \"Protocol\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Controller Service to use in order to obtain an SSL Context. If this property is set, syslog messages will be sent over a secure connection.\",\n                                 \"displayName\": \"SSL Context Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"SSL Context Service\",\n                                 \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"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\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.transcribe.GetAwsTranscribeJobStatus\"\n+                            \"org.apache.nifi.processors.standard.ListenSyslog\",\n+                            \"org.apache.nifi.processors.standard.ParseSyslog\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to Syslog are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Transcribe\"\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.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+                        \"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-M4\",\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+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -81907,379 +79925,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_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+                            \"Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"FLOWFILE_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the character set of the data being sent.\",\n+                                \"displayName\": \"Character Set\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Character Set\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\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\": \"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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Connection Per FlowFile\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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+                                \"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\": \"Communications Timeout\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\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+                            \"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\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"name\": \"Port\",\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                            \"Record Reader\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the Controller Service to use for reading Records from input FlowFiles\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"Record Writer\": {\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+                                            \"RECORD_ORIENTED\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Transmission Strategy\",\n+                                        \"propertyName\": \"Transmission Strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\n+                                \"description\": \"Specifies the Controller Service to use for writing Records to the configured socket address\",\n+                                \"displayName\": \"Record Writer\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\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-M4\"\n+                                }\n                             },\n                             \"SSL Context Service\": {\n-                                \"description\": \"Specifies an optional SSL Context Service that, if provided, will be used to create connections\",\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-M4\"\n                                 }\n                             },\n-                            \"awsTaskId\": {\n-                                \"defaultValue\": \"${awsTaskId}\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"AWS Task ID\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"awsTaskId\",\n-                                \"required\": true,\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-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"Transmission Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Send FlowFile content as a single stream\",\n+                                        \"displayName\": \"FlowFile-oriented\",\n+                                        \"value\": \"FLOWFILE_ORIENTED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Read Records from input FlowFiles and send serialized Records as individual messages\",\n+                                        \"displayName\": \"Record-oriented\",\n+                                        \"value\": \"RECORD_ORIENTED\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"FLOWFILE_ORIENTED\",\n+                                \"description\": \"Specifies the strategy used for reading input FlowFiles and transmitting messages to the destination socket address\",\n+                                \"displayName\": \"Transmission Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"Transmission Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.StartAwsTranslateJob\"\n+                            \"org.apache.nifi.processors.standard.ListenTCP\",\n+                            \"org.apache.nifi.processors.standard.PutUDP\"\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\": \"Job successfully finished. FlowFile will be routed to this relation.\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"The job failed, the original FlowFile will be routed to this relationship.\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out 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+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"tcp\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"S3 path-style output location of the result.\",\n-                                \"name\": \"outputLocation\"\n+                                \"description\": \"Count of records transmitted to configured destination address\",\n+                                \"name\": \"record.count.transmitted\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -82288,2280 +80197,2334 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-M4\"\n-                                }\n-                            },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\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-                            \"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+                            \"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\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"name\": \"Idle Connection Expiration\",\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                            \"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\": \"Region\",\n+                                \"name\": \"Max Size of Socket Send Buffer\",\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+                            \"Port\": {\n+                                \"description\": \"Destination port number\",\n+                                \"displayName\": \"Port\",\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-M4\"\n-                                }\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-                            \"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+                            \"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\": \"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\": \"Timeout\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.ml.translate.GetAwsTranslateJobStatus\"\n+                            \"org.apache.nifi.processors.standard.ListenUDP\",\n+                            \"org.apache.nifi.processors.standard.PutTCP\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n-                        \"supportsBatching\": false,\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"ML\",\n-                            \"Machine Learning\",\n-                            \"Translate\"\n+                            \"egress\",\n+                            \"put\",\n+                            \"remote\",\n+                            \"udp\"\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.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-M4\",\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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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+                        \"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-M4\"\n-                                }\n-                            },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"Bucket\",\n-                                \"required\": true,\n+                                \"name\": \"Columns to Return\",\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+                            \"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\": \"Communications Timeout\",\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-M4\"\n+                                }\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+                            \"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\": \"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+                                \"name\": \"Fetch Size\",\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+                            \"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\": \"Object Key\",\n+                                \"name\": \"Max Wait Time\",\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+                            \"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\": \"Owner\",\n+                                \"name\": \"Maximum-value Columns\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read ACL User List\",\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-                            \"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+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Read Permission User List\",\n-                                \"required\": false,\n+                                \"name\": \"Table Name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-fetch-db-type\": {\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+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"db-fetch-db-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+                            \"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\": \"SSL Context Service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Signer Override\": {\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+                            \"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\": \"Default Signature\",\n-                                        \"value\": \"Default Signature\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Signature Version 4\",\n-                                        \"value\": \"AWSS3V4SignerType\"\n-                                    },\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"dbf-normalize\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbf-user-logical-types\": {\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\": \"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\": \"Signer Override\",\n-                                \"required\": false,\n+                                \"name\": \"dbf-user-logical-types\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to delete\",\n-                                \"displayName\": \"Version\",\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Version\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"initial-load-strategy\",\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+                            \"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\": \"Write ACL User List\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"Write Permission User List\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"custom-signer-class-name\",\n+                                \"name\": \"qdbt-output-batch-size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n+                            \"transaction-isolation-level\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\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\": \"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-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"proxy-configuration-service\",\n+                                \"name\": \"transaction-isolation-level\",\n                                 \"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-M4\"\n-                                }\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.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\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Delete\",\n-                            \"S3\"\n+                            \"database\",\n+                            \"jdbc\",\n+                            \"query\",\n+                            \"select\",\n+                            \"sql\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\n+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n-                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\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 S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\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\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\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-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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                             {\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+                                        \"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\": \"\\\"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+                                        \"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\": \"Retrieve all files in an S3 bucket\",\n+                                \"description\": \"Perform an incremental load of multiple database tables, fetching only new rows as they are added to the tables.\",\n                                 \"keywords\": [\n-                                    \"s3\",\n-                                    \"state\",\n-                                    \"retrieve\",\n-                                    \"fetch\",\n-                                    \"all\",\n+                                    \"incremental load\",\n+                                    \"rdbms\",\n+                                    \"jdbc\",\n+                                    \"cdc\",\n+                                    \"database\",\n+                                    \"table\",\n                                     \"stream\"\n                                 ],\n                                 \"notes\": \"\"\n-                            },\n-                            {\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-                        \"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+                            \"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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Database Connection Pooling Service\",\n                                 \"required\": true,\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.dbcp.DBCPService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${s3.bucket}\",\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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-                                \"name\": \"Bucket\",\n+                                \"name\": \"Max Wait Time\",\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+                            \"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\": \"Communications Timeout\",\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-                            \"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+                            \"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\": \"Endpoint Override URL\",\n+                                \"name\": \"Set Auto Commit\",\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+                            \"Table Name\": {\n+                                \"description\": \"The name of the database table to be queried. When a custom query is used, this property is used to alias the query and appears as an attribute on the FlowFile.\",\n+                                \"displayName\": \"Table Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Object Key\",\n+                                \"name\": \"Table Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"db-fetch-db-type\": {\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+                                        \"description\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : me-south-1\",\n-                                        \"displayName\": \"Middle East (Bahrain)\",\n-                                        \"value\": \"me-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\n+                                        \"description\": \"Generates Oracle compliant SQL for version 12 or greater\",\n+                                        \"displayName\": \"Oracle 12+\",\n+                                        \"value\": \"Oracle 12+\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Generates MS SQL Compatible SQL for version 2008\",\n+                                        \"displayName\": \"MS SQL 2008\",\n+                                        \"value\": \"MS SQL 2008\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Generates MySQL compatible SQL\",\n+                                        \"displayName\": \"MySQL\",\n+                                        \"value\": \"MySQL\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\n+                                        \"description\": \"Generates PostgreSQL compatible SQL\",\n+                                        \"displayName\": \"PostgreSQL\",\n+                                        \"value\": \"PostgreSQL\"\n                                     },\n                                     {\n-                                        \"description\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\n+                                        \"description\": \"Generates Phoenix compliant SQL\",\n+                                        \"displayName\": \"Phoenix\",\n+                                        \"value\": \"Phoenix\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"db-fetch-db-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-                                \"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-M4\"\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+                            \"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\": \"Signer Override\",\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-                            \"Version\": {\n-                                \"description\": \"The Version of the Object to download\",\n-                                \"displayName\": \"Version\",\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\": \"Version\",\n+                                \"name\": \"db-fetch-where-clause\",\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+                            \"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\": \"custom-signer-class-name\",\n+                                \"name\": \"dbf-default-precision\",\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+                            \"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\": \"custom-signer-module-location\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n-                                    ]\n-                                },\n+                                \"name\": \"dbf-default-scale\",\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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"dbf-user-logical-types\",\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+                            \"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                                 \"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-M4\"\n-                                }\n+                                \"name\": \"initial-load-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"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\": \"range-length\",\n-                                \"required\": 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-                            \"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+                            \"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\": \"range-start\",\n-                                \"required\": 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-                            \"requester-pays\": {\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\": \"Indicates that the requester consents to pay any charges associated with retrieving objects from the S3 bucket.\",\n-                                        \"displayName\": \"True\",\n+                                        \"description\": \"\",\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+                                        \"description\": \"\",\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+                                \"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\": \"requester-pays\",\n+                                \"name\": \"qdbtr-normalize\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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-M4\"\n+                                }\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+                            \"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\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Fetch\",\n-                            \"Get\",\n-                            \"S3\"\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.aws.s3.FetchS3Object\",\n-                        \"typeDescription\": \"Retrieves the contents of an S3 Object and writes it to the content of a FlowFile\",\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\": \"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+                                \"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-M4\",\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+                                \"description\": \"Name of the table being queried\",\n+                                \"name\": \"tablename\"\n                             },\n                             {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"path\"\n+                                \"description\": \"The number of rows selected by the query\",\n+                                \"name\": \"querydbtable.row.count\"\n                             },\n                             {\n-                                \"description\": \"The path of the file\",\n-                                \"name\": \"absolute.path\"\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 name of the file\",\n-                                \"name\": \"filename\"\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\": \"The MD5 sum of the file\",\n-                                \"name\": \"hash.value\"\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\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\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\": \"If S3 provides the content type/MIME type, this attribute will hold that file\",\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 ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\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-                                \"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\": \"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+                                \"description\": \"The number of records output by the Record Writer.\",\n+                                \"name\": \"record.count\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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\": \"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_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+                            \"cache-schema\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"This property is no longer used. It remains solely for backward compatibility in order to avoid making existing Processors invalid upon upgrade. This property will be removed in future versions. Now, instead of forcing the user to understand the semantics of schema caching, the Processor caches up to 25 schemas and automatically rolls off the old schemas. This provides the same performance when caching was enabled previously and in some cases very significant performance improvements if caching was previously disabled.\",\n+                                \"displayName\": \"Cache Schema\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"AWS Credentials Provider service\",\n+                                \"name\": \"cache-schema\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Bucket\": {\n-                                \"description\": \"The S3 Bucket to interact with\",\n-                                \"displayName\": \"Bucket\",\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\": \"Bucket\",\n+                                \"name\": \"dbf-default-precision\",\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+                            \"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\": \"Communications Timeout\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"dbf-default-scale\",\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-                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Listing Batch Size\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"include-zero-record-flowfiles\": {\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\": \"\",\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\": \"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\": \"Region\",\n+                                \"name\": \"include-zero-record-flowfiles\",\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+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema\",\n+                                \"displayName\": \"Record Reader\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Context Service\",\n-                                \"required\": false,\n+                                \"name\": \"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-M4\"\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+                            \"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\": \"Signer Override\",\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+                                \"name\": \"record-writer\",\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+                                \"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-M4\"\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+                            },\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-M4\",\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\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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                                 \"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+                                \"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-M4\"\n+                                }\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+                            \"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\": \"delimiter\",\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-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.UpdateRecord\"\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-                            \"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\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"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-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\n+                                \"notes\": \"\"\n+                            }\n+                        ],\n+                        \"version\": \"2.0.0-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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\": \"et-initial-listing-target\",\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-M4\"\n+                                }\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+                            \"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\": \"et-state-cache\",\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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\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\": \"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-                            \"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\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"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+                            {\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-                                \"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+                                \"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-M4\",\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\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"et-time-window\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"list-type\": {\n+                            \"Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"List Objects V1\",\n-                                        \"value\": \"1\"\n+                                        \"displayName\": \"Line-by-Line\",\n+                                        \"value\": \"Line-by-Line\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"List Objects V2\",\n-                                        \"value\": \"2\"\n+                                        \"displayName\": \"Entire text\",\n+                                        \"value\": \"Entire text\"\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\": \"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\": \"list-type\",\n+                                \"name\": \"Evaluation Mode\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"listing-strategy\": {\n+                            \"Line-by-Line Evaluation Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. 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+                                        \"description\": \"\",\n+                                        \"displayName\": \"All\",\n+                                        \"value\": \"All\"\n                                     },\n                                     {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with '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\": \"\",\n+                                        \"displayName\": \"First-Line\",\n+                                        \"value\": \"First-Line\"\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\": \"\",\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\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\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\": \"listing-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"Line-by-Line Evaluation Mode\",\n+                                \"required\": false,\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+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file or per line, depending on the Evaluation Mode) in order to apply the replacement. If 'Entire Text' (in Evaluation Mode) is selected and the FlowFile is larger than this value, the FlowFile will be routed to 'failure'. In 'Line-by-Line' Mode, if a single line is larger than this value, the FlowFile will be routed to 'failure'. A default value of 1 MB is provided, primarily for 'Entire Text' mode. In 'Line-by-Line' Mode, a value such as 8 KB or 16 KB is suggested. This value is ignored if the <Replacement Strategy> property is set to one of: Append, Prepend, Always Replace\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-age\",\n-                                \"required\": false,\n+                                \"name\": \"Maximum Buffer Size\",\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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Regular Expression\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Replacement Strategy\": {\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+                                    },\n+                                    {\n+                                        \"description\": \"Substitute variable references (specified in ${var} form) using FlowFile attributes for looking up the replacement value by variable name. When this strategy is chosen, both the <Search Value> and <Replacement Value> properties are ignored.\",\n+                                        \"displayName\": \"Substitute Variables\",\n+                                        \"value\": \"Substitute Variables\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"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\": \"min-age\",\n+                                \"name\": \"Replacement Strategy\",\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+                            \"Replacement Value\": {\n+                                \"defaultValue\": \"$1\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Prepend\",\n+                                            \"Regex Replace\",\n+                                            \"Always Replace\",\n+                                            \"Append\",\n+                                            \"Literal Replace\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The value to insert using the 'Replacement Strategy'. Using \\\"Regex Replace\\\" back-references to Regular Expression capturing groups are supported, but back-references that reference capturing groups that do not exist in the regular expression will be treated as literal value. Back References may also be referenced using the Expression Language, as '$1', '$2', etc. The single-tick marks MUST be included, as these variables are not \\\"Standard\\\" attribute names (attribute names must be quoted unless they contain only numbers, letters, and _).\",\n+                                \"displayName\": \"Replacement Value\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prefix\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Replacement Value\",\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+                            \"Text to Append\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text to append to the end of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Append\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Text to Append\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Text to Prepend\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Surround\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Replacement Strategy\",\n+                                        \"propertyName\": \"Replacement Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The text to prepend to the start of the FlowFile, or each line, depending on teh configured value of the Evaluation Mode property\",\n+                                \"displayName\": \"Text to Prepend\",\n+                                \"dynamic\": 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+                            {\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+                            },\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"Character Set\",\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+                            \"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-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-M4\"\n-                                }\n+                                \"name\": \"Mapping File\",\n+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n                             },\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+                            \"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\": \"requester-pays\",\n+                                \"name\": \"Mapping File Refresh Interval\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-versions\": {\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\": \"Matching Group\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Maximum Buffer Size\": {\n+                                \"defaultValue\": \"1 MB\",\n+                                \"description\": \"Specifies the maximum amount of data to buffer (per file) in order to apply the regular expressions. If a FlowFile is larger than this value, the FlowFile will be routed to 'failure'\",\n+                                \"displayName\": \"Maximum Buffer Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum Buffer Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Regular Expression\": {\n+                                \"defaultValue\": \"\\\\S+\",\n+                                \"description\": \"The Regular Expression to search for in the FlowFile content\",\n+                                \"displayName\": \"Regular Expression\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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+                            {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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-                                \"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\": \"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\": \"use-versions\",\n+                                \"name\": \"Fail on Non-numerical Overwrite\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"write-s3-object-tags\": {\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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"penalize-retries\": {\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 tags associated with the S3 object will be written as FlowFile attributes\",\n-                                \"displayName\": \"Write Object Tags\",\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\": \"write-s3-object-tags\",\n+                                \"name\": \"penalize-retries\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"write-s3-user-metadata\": {\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\": \"retry-attribute\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reuse-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"True\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\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\": \"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+                                \"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\": \"write-s3-user-metadata\",\n+                                \"name\": \"reuse-mode\",\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+                        \"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-                        \"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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\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\": \"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-                        \"supportsDynamicProperties\": false,\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"S3\",\n-                            \"list\"\n+                            \"FlowFile\",\n+                            \"Retry\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\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.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-M4\",\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+                                \"description\": \"User defined retry attribute is updated with the current retry count\",\n+                                \"name\": \"Retry Attribute\"\n                             },\n                             {\n-                                \"description\": \"The ETag that can be used to see if the file has changed\",\n-                                \"name\": \"s3.etag\"\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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 boolean indicating if this is the latest version of the object\",\n-                                \"name\": \"s3.isLatest\"\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-                                \"description\": \"The last modified time in milliseconds since epoch in UTC time\",\n-                                \"name\": \"s3.lastModified\"\n-                            },\n+                                \"configurations\": [\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+                                    },\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+                                    }\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+                                \"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+                                    },\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+                                    }\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Routing Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"description\": \"The size of the object in bytes\",\n-                                \"name\": \"s3.length\"\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-                                \"description\": \"The storage class of the object\",\n-                                \"name\": \"s3.storeClass\"\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                             },\n                             {\n-                                \"description\": \"The version of the object, if applicable\",\n-                                \"name\": \"s3.version\"\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                             {\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+                                \"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-M4\",\n+                        \"writesAttributes\": [\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 relation to which the FlowFile was routed\",\n+                                \"name\": \"RouteOnAttribute.Route\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -84571,928 +82534,1211 @@\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+                                \"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\": \"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+                                \"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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"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-M4\"\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+                                \"name\": \"Character Set\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Cache Control\",\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+                            \"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\": \"Communications Timeout\",\n+                                \"name\": \"Content Buffer Size\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Content Disposition\": {\n+                            \"Match Requirement\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"inline\",\n-                                        \"value\": \"inline\"\n+                                        \"displayName\": \"content must match exactly\",\n+                                        \"value\": \"content must match exactly\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"attachment\",\n-                                        \"value\": \"attachment\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Content Disposition\",\n-                                \"required\": false,\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Content Type\",\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-                                \"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\": \"Expiration Time Rule\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"File Resource Service\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"FILE_RESOURCE_SERVICE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n-                                        \"propertyName\": \"Resource Transfer Source\"\n+                                        \"displayName\": \"content must contain match\",\n+                                        \"value\": \"content must contain match\"\n                                     }\n                                 ],\n-                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n-                                \"displayName\": \"File Resource Service\",\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\": \"File Resource Service\",\n+                                \"name\": \"Match Requirement\",\n                                 \"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-M4\"\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+                            }\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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\": \"Multipart Part Size\",\n+                                \"name\": \"Character Set\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"Multipart Threshold\",\n-                                \"required\": true,\n+                                \"name\": \"Grouping Regular Expression\",\n+                                \"required\": false,\n                                 \"sensitive\": false\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+                            \"Ignore Case\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"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\": \"Multipart Upload AgeOff Interval\",\n+                                \"name\": \"Ignore Case\",\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+                            \"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\": \"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\": \"Ignore Leading/Trailing Whitespace\",\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+                            \"Matching Strategy\": {\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+                                        \"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\": \"AWS Region Code : af-south-1\",\n-                                        \"displayName\": \"Africa (Cape Town)\",\n-                                        \"value\": \"af-south-1\"\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\": \"AWS Region Code : us-iso-east-1\",\n-                                        \"displayName\": \"US ISO East\",\n-                                        \"value\": \"us-iso-east-1\"\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\": \"AWS Region Code : us-isob-east-1\",\n-                                        \"displayName\": \"US ISOB East (Ohio)\",\n-                                        \"value\": \"us-isob-east-1\"\n+                                        \"description\": \"Match lines based on whether the line contains the property value\",\n+                                        \"displayName\": \"Contains\",\n+                                        \"value\": \"Contains\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : us-iso-west-1\",\n-                                        \"displayName\": \"US ISO West\",\n-                                        \"value\": \"us-iso-west-1\"\n+                                        \"description\": \"Match lines based on whether the line equals the property value\",\n+                                        \"displayName\": \"Equals\",\n+                                        \"value\": \"Equals\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : il-central-1\",\n-                                        \"displayName\": \"Israel (Tel Aviv)\",\n-                                        \"value\": \"il-central-1\"\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\": \"Uses 's3.region' FlowFile attribute as region.\",\n-                                        \"displayName\": \"Use 's3.region' Attribute\",\n-                                        \"value\": \"attribute-defined-region\"\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\": \"us-west-2\",\n-                                \"description\": \"The AWS Region to connect to.\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"Matching Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Resource Transfer Source\": {\n+                            \"Routing Strategy\": {\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\": \"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\": \"The File Resource Service provides the source for transfer\",\n-                                        \"displayName\": \"File Resource Service\",\n-                                        \"value\": \"FILE_RESOURCE_SERVICE\"\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\": \"FLOWFILE_CONTENT\",\n-                                \"description\": \"The source of the content to be transferred\",\n-                                \"displayName\": \"Resource Transfer Source\",\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\": \"Resource Transfer Source\",\n+                                \"name\": \"Routing Strategy\",\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-                            \"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+                            {\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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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                                 \"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-M4\"\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+                            \"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\": \"Signer Override\",\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-M4\"\n+                                }\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+                            \"sample-record-interval\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"StandardInfrequentAccess\",\n-                                        \"value\": \"StandardInfrequentAccess\"\n+                                        \"dependentValues\": [\n+                                            \"interval\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Standard\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Storage Class\",\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\": \"Storage Class\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-interval\",\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+                            \"sample-record-probability\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"probabilistic\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Specifies the probability (as a percent from 0-100) of a record being included in the outgoing FlowFile. This property is only used if Sampling Strategy is set to Probabilistic Sampling. A value of zero (0) will cause no records to be included in theoutgoing FlowFile, and a value of 100 will cause all records to be included in the outgoing FlowFile..\",\n+                                \"displayName\": \"Sampling Probability\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write ACL User List\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-probability\",\n+                                \"required\": true,\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+                            \"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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Write Permission User List\",\n+                                \"name\": \"sample-record-random-seed\",\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+                            \"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\": \"canned-acl\",\n-                                \"required\": false,\n+                                \"name\": \"sample-record-range\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-class-name\": {\n+                            \"sample-record-reservoir\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"CustomSignerType\"\n+                                            \"reservoir\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\n+                                        \"propertyDisplayName\": \"Sampling Strategy\",\n+                                        \"propertyName\": \"sample-record-sampling-strategy\"\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\": \"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\": \"custom-signer-class-name\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"sample-record-reservoir\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"custom-signer-module-location\": {\n-                                \"dependencies\": [\n+                            \"sample-record-sampling-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"CustomSignerType\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Signer Override\",\n-                                        \"propertyName\": \"Signer Override\"\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-                                \"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\": \"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\": \"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+                            {\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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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\": \"custom-signer-module-location\",\n-                                \"required\": false,\n+                                \"name\": \"Dictionary File\",\n+                                \"required\": true,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n+                                    \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\",\n-                                        \"DIRECTORY\"\n+                                        \"FILE\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n                             },\n-                            \"encryption-service\": {\n-                                \"description\": \"Specifies the Encryption Service Controller used to configure requests. PutS3Object: For backward compatibility, this value is ignored when 'Server Side Encryption' is set. FetchS3Object: Only needs to be configured in case of Server-side Customer Key, Client-side KMS and Client-side Customer Key encryptions.\",\n-                                \"displayName\": \"Encryption Service\",\n+                            \"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\": \"encryption-service\",\n+                                \"name\": \"Dictionary Filter Pattern\",\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-M4\"\n-                                }\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+                            \"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                                 \"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-M4\"\n-                                }\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-                            \"s3-object-remove-tags-prefix\": {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"True\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"False\",\n-                                        \"value\": \"false\"\n+                                        \"displayName\": \"binary\",\n+                                        \"value\": \"binary\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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+                                \"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\": \"s3-object-remove-tags-prefix\",\n-                                \"required\": false,\n+                                \"name\": \"Dictionary Encoding\",\n+                                \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"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+                            {\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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"s3-object-tags-prefix\",\n-                                \"required\": false,\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+                            {\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-                            \"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+                            {\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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"s3-temporary-directory-multipart\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Byte Sequence\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"server-side-encryption\": {\n+                            \"Byte Sequence Format\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"None\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as a hexadecimal representation of bytes\",\n+                                        \"displayName\": \"Hexadecimal\",\n+                                        \"value\": \"Hexadecimal\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AES256\",\n-                                        \"value\": \"AES256\"\n+                                        \"description\": \"The Byte Sequence will be interpreted as UTF-8 Encoded text\",\n+                                        \"displayName\": \"Text\",\n+                                        \"value\": \"Text\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"None\",\n-                                \"description\": \"Specifies the algorithm used for server side encryption.\",\n-                                \"displayName\": \"Server Side Encryption\",\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\": \"server-side-encryption\",\n+                                \"name\": \"Byte Sequence Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-chunked-encoding\": {\n+                            \"Byte Sequence Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"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\": \"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\": \"use-chunked-encoding\",\n-                                \"required\": false,\n+                                \"name\": \"Byte Sequence Location\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-path-style-access\": {\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\": \"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\": \"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\": \"use-path-style-access\",\n-                                \"required\": false,\n+                                \"name\": \"Keep Byte Sequence\",\n+                                \"required\": true,\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+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"All Splits will be routed to the splits relationship\",\n+                                \"name\": \"splits\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"The original file\",\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+                        \"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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"Put\",\n-                            \"S3\"\n+                            \"binary\",\n+                            \"content\",\n+                            \"split\"\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.standard.SplitContent\",\n+                        \"typeDescription\": \"Splits incoming FlowFiles by a specified byte sequence\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"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 S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\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 HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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                             },\n-                            {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\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\": \"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\": \"The ETag of the S3 Object\",\n-                                \"name\": \"s3.etag\"\n+                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid JSON or the specified path does not exist), it will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The content disposition of the S3 Object that put in S3\",\n-                                \"name\": \"s3.contentdisposition\"\n+                                \"description\": \"The original FlowFile that was split into segments. If the FlowFile fails processing, nothing will be sent to this relationship\",\n+                                \"name\": \"original\"\n                             },\n                             {\n-                                \"description\": \"The cache-control header of the S3 Object\",\n-                                \"name\": \"s3.cachecontrol\"\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 uploadId used to upload the Object to S3\",\n-                                \"name\": \"s3.uploadId\"\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-M4\",\n+                        \"writesAttributes\": [\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\": \"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 server side encryption algorithm of the object\",\n-                                \"name\": \"s3.sseAlgorithm\"\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\": \"A human-readable form of the User Metadata of the S3 object, if any was set\",\n-                                \"name\": \"s3.usermetadata\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The name of the encryption strategy, if any was set\",\n-                                \"name\": \"s3.encryptionStrategy\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -85505,503 +83751,287 @@\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+                            \"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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"Record Reader\",\n                                 \"required\": true,\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.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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-                            \"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+                            \"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\": \"Communications Timeout\",\n+                                \"name\": \"Record Writer\",\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\": 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-M4\"\n+                                }\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+                            \"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\": \"Object Key\",\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-                            \"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+                            {\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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Region\",\n+                                \"name\": \"Header Line Count\",\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+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"Header Line Marker Characters\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"Signer Override\",\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-                            \"append-tag\": {\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\": \"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\": \"append-tag\",\n-                                \"required\": true,\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-                                \"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\": \"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-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"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-M4\"\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+                                \"name\": \"Remove Trailing Newlines\",\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.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If the Processor is unable to process a given FlowFile, it will be routed to this Relationship.\",\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\": \"FlowFiles are routed to this Relationship after they have been successfully processed.\",\n-                                \"name\": \"success\"\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-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Archive\",\n-                            \"S3\",\n-                            \"Tag\"\n+                            \"split\",\n+                            \"text\"\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.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-M4\",\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+                                \"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 class name of the exception thrown during processor execution\",\n-                                \"name\": \"s3.exception\"\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\": \"The S3 supplied detail from the failed operation\",\n-                                \"name\": \"s3.additionalDetails\"\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 HTTP error code (if available) from the failed operation\",\n-                                \"name\": \"s3.statusCode\"\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 S3 moniker of the failed operation\",\n-                                \"name\": \"s3.errorCode\"\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n                             },\n                             {\n-                                \"description\": \"The S3 exception message from the failed operation\",\n-                                \"name\": \"s3.errorMessage\"\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86009,444 +84039,397 @@\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+                        \"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\": \"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+                                \"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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"All split FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n+                            },\n+                            {\n+                                \"description\": \"A one-up number that indicates the ordering of the split FlowFiles that were created from a single parent FlowFile\",\n+                                \"name\": \"fragment.index\"\n+                            },\n+                            {\n+                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n+                                \"name\": \"fragment.count\"\n+                            },\n+                            {\n+                                \"description\": \"The filename of the parent FlowFile\",\n+                                \"name\": \"segment.original.filename \"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"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_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"ARN Type\": {\n+                            \"File Location\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The ARN is the name of a topic\",\n-                                        \"displayName\": \"Topic ARN\",\n-                                        \"value\": \"Topic ARN\"\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\": \"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\": \"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\": \"Topic ARN\",\n-                                \"description\": \"The type of Amazon Resource Name that is being used.\",\n-                                \"displayName\": \"ARN Type\",\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\": \"ARN Type\",\n+                                \"name\": \"File Location\",\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+                            \"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\": \"AWS Credentials Provider service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"Initial Start Position\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Start with the oldest data that matches the Rolling Filename Pattern and then begin reading from the File to Tail\",\n+                                        \"displayName\": \"Beginning of Time\",\n+                                        \"value\": \"Beginning of Time\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the beginning of the File to Tail. Do not ingest any data that has already been rolled over\",\n+                                        \"displayName\": \"Beginning of File\",\n+                                        \"value\": \"Beginning of File\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Start with the data at the end of the File to Tail. Do not ingest any data thas has already been rolled over or any data in the File to Tail that has already been written.\",\n+                                        \"displayName\": \"Current Time\",\n+                                        \"value\": \"Current Time\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"Beginning of File\",\n+                                \"description\": \"When the Processor first begins to tail data, this property specifies where the Processor should begin reading data. Once data has been ingested from a file, the Processor will continue from the last point from which it has received data.\",\n+                                \"displayName\": \"Initial Start Position\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Amazon Resource Name (ARN)\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Initial Start Position\",\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+                            \"Line Start Pattern\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"Single file\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Tailing mode\",\n+                                        \"propertyName\": \"tail-mode\"\n+                                    }\n+                                ],\n+                                \"description\": \"A Regular Expression to match against the start of a log line. If specified, any line that matches the expression, and any following lines, will be buffered until another line matches the Expression. In doing this, we can avoid splitting apart multi-line messages in the file. This assumes that the data is in UTF-8 format.\",\n+                                \"displayName\": \"Line Start Pattern\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Character Set\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Line Start Pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\n+                            \"Max Buffer Size\": {\n+                                \"defaultValue\": \"64 KB\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Line Start Pattern\",\n+                                        \"propertyName\": \"Line Start Pattern\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using the Line Start Pattern, there may be situations in which the data in the file being tailed never matches the Regular Expression. This would result in the processor buffering all data from the tailed file, which can quickly exhaust the heap. To avoid this, the Processor will buffer only up to this amount of data before flushing the buffer, even if it means ingesting partial data from the file.\",\n+                                \"displayName\": \"Max Buffer Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Communications Timeout\",\n+                                \"name\": \"Max Buffer Size\",\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+                            \"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\": \"Deduplication Message ID\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Post-Rollover Tail Period\",\n                                 \"required\": false,\n                                 \"sensitive\": false\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"E-mail Subject\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Rolling Filename Pattern\",\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+                            \"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\": \"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\": \"pre-allocated-buffer-size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"reread-on-nul\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If 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\": \"reread-on-nul\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Message Group ID\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"tail-base-directory\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Region\": {\n+                            \"tail-mode\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"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\": \"AWS Region Code : aws-us-gov-global\",\n-                                        \"displayName\": \"aws-us-gov-global\",\n-                                        \"value\": \"aws-us-gov-global\"\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\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"tail-mode\",\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+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"tailfile-lookup-frequency\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Use JSON Structure\": {\n+                            \"tailfile-maximum-age\": {\n+                                \"defaultValue\": \"24 hours\",\n+                                \"description\": \"Only used in Multiple files mode. It specifies the necessary minimum duration to consider that no new messages will be appended in a file regarding its last modification date. This should not be set too low to avoid duplication of data in case new messages are appended at a lower frequency.\",\n+                                \"displayName\": \"Maximum age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"tailfile-maximum-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"tailfile-recursive-lookup\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"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+                                \"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\": \"Use JSON Structure\",\n+                                \"name\": \"tailfile-recursive-lookup\",\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-                        ],\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\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles are routed to this Relationship.\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"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+                            \"file\",\n+                            \"log\",\n+                            \"source\",\n+                            \"tail\",\n+                            \"text\"\n                         ],\n-                        \"triggerSerially\": false,\n+                        \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\"\n+                        \"version\": \"2.0.0-M4\",\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-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86454,374 +84437,173 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"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-                            \"AWS Credentials Provider service\": {\n-                                \"description\": \"The Controller Service that is used to obtain AWS credentials provider\",\n-                                \"displayName\": \"AWS Credentials Provider Service\",\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\": \"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-M4\"\n-                                }\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-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"Communications Timeout\",\n+                                \"name\": \"cache-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+                            \"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\": \"Endpoint Override URL\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"cache-ttl-after-last-access\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Queue URL\": {\n-                                \"description\": \"The URL of the queue delete from\",\n-                                \"displayName\": \"Queue URL\",\n+                            \"indent-output\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"true\",\n+                                \"description\": \"Whether or not to indent the output.\",\n+                                \"displayName\": \"Indent\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"indent-output\",\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Receipt Handle\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Region\": {\n+                            \"secure-processing\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"us-west-2\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Region\",\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\": \"Region\",\n+                                \"name\": \"secure-processing\",\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+                            \"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-M4\"\n                                 }\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests.\",\n-                                \"displayName\": \"Proxy Configuration Service\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"xslt-controller-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.proxy.ProxyConfigurationService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"sensitive\": false\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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n-                                \"name\": \"success\"\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\": true,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Delete\",\n-                            \"Queue\",\n-                            \"SQS\"\n+                            \"transform\",\n+                            \"xml\",\n+                            \"xslt\"\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.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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -86830,1312 +84612,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_FORBIDDEN\",\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+                            \"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\": \"AWS Credentials Provider service\",\n+                                \"name\": \"File Filter\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Auto Delete Messages\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"Filename Character Set\": {\n+                                \"defaultValue\": \"UTF-8\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"zip\",\n+                                            \"use mime.type attribute\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Auto Delete Messages\",\n-                                \"required\": true,\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+                                \"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\": \"Batch Size\",\n-                                \"required\": true,\n+                                \"name\": \"Filename Character Set\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Character Set\": {\n+                            \"Packaging Format\": {\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+                                        \"displayName\": \"use mime.type attribute\",\n+                                        \"value\": \"use mime.type attribute\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-50221\",\n-                                        \"value\": \"x-windows-50221\"\n+                                        \"displayName\": \"tar\",\n+                                        \"value\": \"tar\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-874\",\n-                                        \"value\": \"x-windows-874\"\n+                                        \"displayName\": \"zip\",\n+                                        \"value\": \"zip\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-949\",\n-                                        \"value\": \"x-windows-949\"\n+                                        \"displayName\": \"flowfile-stream-v3\",\n+                                        \"value\": \"flowfile-stream-v3\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-950\",\n-                                        \"value\": \"x-windows-950\"\n+                                        \"displayName\": \"flowfile-stream-v2\",\n+                                        \"value\": \"flowfile-stream-v2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"x-windows-iso2022jp\",\n-                                        \"value\": \"x-windows-iso2022jp\"\n+                                        \"displayName\": \"flowfile-tar-v1\",\n+                                        \"value\": \"flowfile-tar-v1\"\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+                                \"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\": \"Character Set\",\n+                                \"name\": \"Packaging Format\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Communications Timeout\": {\n-                                \"defaultValue\": \"30 secs\",\n-                                \"description\": \"\",\n-                                \"displayName\": \"Communications Timeout\",\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\": \"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\": \"Password\",\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+                                \"sensitive\": true\n                             },\n-                            \"Region\": {\n+                            \"allow-stored-entries-wdd\": {\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"AWS Region Code : aws-iso-global\",\n-                                        \"displayName\": \"aws-iso-global\",\n-                                        \"value\": \"aws-iso-global\"\n-                                    },\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\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+                                            \"zip\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Packaging Format\",\n+                                        \"propertyName\": \"Packaging Format\"\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-M4\"\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+                                \"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\": \"Visibility Timeout\",\n+                                \"name\": \"allow-stored-entries-wdd\",\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-M4\"\n-                                }\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.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.PutSQS\"\n+                            \"org.apache.nifi.processors.standard.MergeContent\"\n                         ],\n-                        \"sideEffectFree\": false,\n+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Unpacked FlowFiles are sent to this relationship\",\n                                 \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship when it cannot be unpacked for some reason\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"The original FlowFile is sent to this relationship after it has been successfully unpacked\",\n+                                \"name\": \"original\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": true,\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+                            \"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.aws.sqs.GetSQS\",\n-                        \"typeDescription\": \"Fetches messages from an Amazon Simple Queuing Service Queue\",\n-                        \"useCases\": [],\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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The MD5 sum of the message\",\n-                                \"name\": \"hash.value\"\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\": \"MD5\",\n-                                \"name\": \"hash.algorithm\"\n+                                \"description\": \"All unpacked FlowFiles produced from the same parent FlowFile will have the same randomly generated UUID added for this attribute\",\n+                                \"name\": \"fragment.identifier\"\n                             },\n                             {\n-                                \"description\": \"The unique identifier of the SQS message\",\n-                                \"name\": \"sqs.message.id\"\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 SQS Receipt Handle that is to be used to delete the message from the queue\",\n-                                \"name\": \"sqs.receipt.handle\"\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-aws-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -88143,1505 +84854,831 @@\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 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                         \"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-M4\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Queue URL\",\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-isoe-west-1\",\n-                                        \"displayName\": \"EU ISOE West\",\n-                                        \"value\": \"eu-isoe-west-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+                                \"name\": \"counter-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-                                \"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-M4\"\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"message-group-id\",\n-                                \"required\": false,\n+                                \"name\": \"delta\",\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-M4\"\n-                                }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.aws.sqs.DeleteSQS\",\n-                            \"org.apache.nifi.processors.aws.sqs.GetSQS\"\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\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"Counter was updated/retrieved\",\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                         \"tags\": [\n-                            \"AWS\",\n-                            \"Amazon\",\n-                            \"Publish\",\n-                            \"Put\",\n-                            \"Queue\",\n-                            \"SQS\"\n+                            \"counter\",\n+                            \"debug\",\n+                            \"instrumentation\"\n                         ],\n                         \"triggerSerially\": false,\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.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-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-provenance-repository-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-prometheus-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"db-type\": {\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\": \"Generates ANSI SQL\",\n+                                        \"displayName\": \"Generic\",\n+                                        \"value\": \"Generic\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will try to verify the client but if unable to verify will allow the client to communicate anonymously\",\n-                                        \"displayName\": \"Want Authentication\",\n-                                        \"value\": \"Want Authentication\"\n+                                        \"description\": \"Generates Oracle compliant SQL\",\n+                                        \"displayName\": \"Oracle\",\n+                                        \"value\": \"Oracle\"\n                                     },\n                                     {\n-                                        \"description\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"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\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"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\": \"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-                                \"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+                                \"name\": \"db-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\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\": \"prometheus-reporting-task-ssl-context\",\n-                                \"required\": false,\n+                                \"name\": \"record-reader\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\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-M4\"\n-                            }\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"prometheus\",\n-                            \"record\",\n-                            \"send\",\n-                            \"write\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-prometheus-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"60 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"prometheus-reporting-task-client-auth\": {\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\": \"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+                                        \"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\": \"ReportingTask will reject communications from any client unless the client provides a certificate that is trusted by the TrustStorespecified in the SSL Context Service\",\n-                                        \"displayName\": \"Need Authentication\",\n-                                        \"value\": \"Need Authentication\"\n+                                        \"description\": \"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\": \"No Authentication\",\n-                                \"description\": \"Specifies whether or not the Reporting Task should authenticate clients. This value is ignored if the <SSL Context Service> Property is not specified or the SSL Context provided uses only a KeyStore and not a TrustStore.\",\n-                                \"displayName\": \"Client Authentication\",\n+                                \"defaultValue\": \"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\": \"prometheus-reporting-task-client-auth\",\n+                                \"name\": \"updatedatabasetable-create-table\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"prometheus-reporting-task-instance-id\",\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-M4\"\n+                                }\n+                            },\n+                            \"updatedatabasetable-primary-keys\": {\n+                                \"dependencies\": [\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-                            \"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+                            \"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\": \"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\": \"updatedatabasetable-query-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-send-jvm\": {\n+                            \"updatedatabasetable-quoted-column-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Send JVM metrics in addition to the NiFi metrics\",\n-                                \"displayName\": \"Send JVM metrics\",\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\": \"prometheus-reporting-task-metrics-send-jvm\",\n-                                \"required\": true,\n+                                \"name\": \"updatedatabasetable-quoted-column-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-metrics-strategy\": {\n+                            \"updatedatabasetable-quoted-table-identifiers\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Send rollup metrics for the entire root process group\",\n-                                        \"displayName\": \"Root Process Group\",\n-                                        \"value\": \"Root Process Group\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Send metrics for each process group\",\n-                                        \"displayName\": \"All Process Groups\",\n-                                        \"value\": \"All Process Groups\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"prometheus-reporting-task-metrics-strategy\",\n-                                \"required\": true,\n+                                \"name\": \"updatedatabasetable-quoted-table-identifiers\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"prometheus-reporting-task-ssl-context\": {\n-                                \"description\": \"The SSL Context Service to use in order to secure the server. If specified, the server willaccept only HTTPS requests; otherwise, the server will accept only HTTP requests\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"updatedatabasetable-record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"true\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Update Field Names\",\n+                                        \"propertyName\": \"updatedatabasetable-update-field-names\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"prometheus-reporting-task-ssl-context\",\n-                                \"required\": false,\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.ssl.RestrictedSSLContextService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordSetWriterFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n-                            }\n-                        },\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"metrics\",\n-                            \"prometheus\",\n-                            \"reporting\",\n-                            \"time series data\"\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-M4\"\n-                    }\n-                ]\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-standard-shared-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-dbcp-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            },\n-                            {\n-                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"SENSITIVE.JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Database Connection URL\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Connection URL\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Database Driver Class Name\": {\n-                                \"description\": \"Database driver class name\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database Driver Class Name\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n                             },\n-                            \"Database User\": {\n-                                \"description\": \"Database user name\",\n-                                \"displayName\": \"Database User\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Database User\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-schema-name\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Max Total Connections\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Max Total Connections\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Max Wait Time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Max Wait Time\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"updatedatabasetable-table-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password for the database user\",\n-                                \"displayName\": \"Password\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"Validation-query\": {\n-                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n-                                \"displayName\": \"Validation query\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Validation-query\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"database-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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-                                        \"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-                                \"displayName\": \"Max Connection Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-max-conn-lifetime\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-max-idle-conns\": {\n-                                \"defaultValue\": \"8\",\n-                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n-                                \"displayName\": \"Max Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-max-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"30 mins\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n-                                \"displayName\": \"Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-min-idle-conns\": {\n-                                \"defaultValue\": \"0\",\n-                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-min-idle-conns\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-soft-min-evictable-idle-time\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n-                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"dbcp-time-between-eviction-runs\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n-                                \"displayName\": \"Time Between Eviction Runs\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"dbcp-time-between-eviction-runs\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"kerberos-credentials-service\": {\n-                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos Credentials Service\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"kerberos-credentials-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n-                            },\n-                            \"kerberos-password\": {\n-                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Password\",\n+                            \"updatedatabasetable-translate-field-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"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\": \"kerberos-password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"kerberos-principal\": {\n-                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"kerberos-principal\",\n-                                \"required\": false,\n+                                \"name\": \"updatedatabasetable-translate-field-names\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"kerberos-user-service\": {\n-                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n-                                \"displayName\": \"Kerberos User Service\",\n+                            \"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\": \"kerberos-user-service\",\n-                                \"required\": false,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                    \"version\": \"2.0.0-M4\"\n-                                }\n+                                \"name\": \"updatedatabasetable-update-field-names\",\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.dbcp.DBCPService\",\n-                                \"version\": \"2.0.0-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n-                        \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n-                        ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n-                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"dynamicProperties\": [\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\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"name\": \"The name to register DBCPService\",\n-                                \"value\": \"The DBCPService\"\n+                                \"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-                        \"group\": \"org.apache.nifi\",\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-M4\"\n-                            }\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-                            \"connection\",\n+                            \"alter\",\n                             \"database\",\n-                            \"dbcp\",\n                             \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"metadata\",\n+                            \"table\",\n+                            \"update\"\n                         ],\n-                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n-                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n-                        \"version\": \"2.0.0-M4\"\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-M4\",\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\": false,\n-                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"defaultYieldDuration\": \"1 sec\",\n                         \"dynamicProperties\": [\n                             {\n-                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"name\": \"JDBC property name\",\n-                                \"value\": \"JDBC property value\"\n-                            }\n-                        ],\n-                        \"explicitRestrictions\": [\n-                            {\n-                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n-                                \"requiredPermission\": \"reference remote resources\"\n+                                \"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-                            \"hikaricp-connection-url\": {\n-                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n-                                \"displayName\": \"Database Connection URL\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-connection-url\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-classname\": {\n-                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n-                                \"displayName\": \"Database Driver Class Name\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-driver-classname\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-driver-locations\": {\n-                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n-                                \"displayName\": \"Database Driver Location(s)\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\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-                                        \"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+                            \"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\": \"hikaricp-kerberos-user-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.kerberos.KerberosUserService\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"hikaricp-max-conn-lifetime\": {\n-                                \"defaultValue\": \"-1\",\n-                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n-                                \"displayName\": \"Max Connection Lifetime\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-max-conn-lifetime\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-max-total-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n-                                \"displayName\": \"Max Total Connections\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-max-total-conns\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"hikaricp-max-wait-time\": {\n-                                \"defaultValue\": \"500 millis\",\n-                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n-                                \"displayName\": \"Max Wait Time\",\n+                            \"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\": \"hikaricp-max-wait-time\",\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-M4\"\n+                                }\n                             },\n-                            \"hikaricp-min-idle-conns\": {\n-                                \"defaultValue\": \"10\",\n-                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n-                                \"displayName\": \"Minimum Idle Connections\",\n+                            \"Replacement Value Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is the desired value to update the Record Fields with. Expression Language may reference variables 'field.name', 'field.type', and 'field.value' to access information about the field and the value of the field being evaluated.\",\n+                                        \"displayName\": \"Literal Value\",\n+                                        \"value\": \"literal-value\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The value entered for a Property (after Expression Language has been evaluated) is not the literal value to use but rather is a Record Path that should be evaluated against the Record, and the result of the RecordPath will be used to update the Record. Note that if this option is selected, and the Record Path results in multiple values for a given Record, the input FlowFile will be routed to the 'failure' Relationship.\",\n+                                        \"displayName\": \"Record Path Value\",\n+                                        \"value\": \"record-path-value\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"literal-value\",\n+                                \"description\": \"Specifies how to interpret the configured replacement values\",\n+                                \"displayName\": \"Replacement Value Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"hikaricp-min-idle-conns\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Replacement Value Strategy\",\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+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.standard.ConvertRecord\"\n+                        ],\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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-M4\"\n+                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are successfully transformed will be routed to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"restricted\": true,\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": true,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"dbcp\",\n-                            \"hikari\",\n-                            \"jdbc\",\n-                            \"pooling\",\n-                            \"store\"\n+                            \"avro\",\n+                            \"csv\",\n+                            \"freeform\",\n+                            \"generic\",\n+                            \"json\",\n+                            \"log\",\n+                            \"logs\",\n+                            \"record\",\n+                            \"schema\",\n+                            \"text\",\n+                            \"update\"\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-M4\"\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.UpdateRecord\",\n+                        \"typeDescription\": \"Updates the contents of a FlowFile that contains Record-oriented data (i.e., data that can be read via a RecordReader and written by a RecordWriter). This Processor requires that at least one user-defined Property be added. The name of the Property should indicate a RecordPath that determines the field that should be updated. The value of the Property is either a replacement value (optionally making use of the Expression Language) or is itself a RecordPath that extracts a value from the Record. Whether the Property value is determined to be a RecordPath or a literal value depends on the configuration of the <Replacement Value Strategy> Property.\",\n+                        \"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-M4\",\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-dbcp-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"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+                            \"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\": \"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-M4\"\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+                                \"name\": \"validate-csv-delimiter\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"db-record-sink-quoted-identifiers\",\n-                                \"required\": 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-                            \"db-record-sink-quoted-table-identifiers\": {\n+                            \"validate-csv-header\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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\": \"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\": \"db-record-sink-quoted-table-identifiers\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-header\",\n+                                \"required\": true,\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+                            \"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\": \"db-record-sink-schema-name\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-quote\",\n+                                \"required\": true,\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+                            \"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\": \"db-record-sink-table-name\",\n+                                \"name\": \"validate-csv-schema\",\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+                            \"validate-csv-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Any column in the database that does not have a field in the document will be assumed to not be required.  No notification will be logged\",\n-                                        \"displayName\": \"Ignore Unmatched Columns\",\n-                                        \"value\": \"Ignore Unmatched Columns\"\n-                                    },\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\": \"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\": \"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\": \"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\": \"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\": \"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\": \"db-record-sink-unmatched-column-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"db-record-sink-unmatched-field-behavior\": {\n+                            \"validate-csv-violations\": {\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\": \"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\": \"db-record-sink-unmatched-field-behavior\",\n-                                \"required\": false,\n+                                \"name\": \"validate-csv-violations\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.record.sink.RecordSinkService\",\n-                                \"version\": \"2.0.0-M4\"\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n                             }\n                         ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n                         \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"connection\",\n-                            \"database\",\n-                            \"db\",\n-                            \"jdbc\",\n-                            \"record\"\n+                            \"csv\",\n+                            \"schema\",\n+                            \"validation\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\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\": \"19c5be0\"\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+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateCsv\",\n+                        \"typeDescription\": \"Validates the contents of FlowFiles against a user-specified CSV schema. Take a look at the additional documentation of this processor for some schema examples.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If line by line validation, number of valid lines extracted from the source data\",\n+                                \"name\": \"count.valid.lines\"\n                             },\n-                            \"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+                                \"description\": \"If line by line validation, number of invalid lines extracted from the source data\",\n+                                \"name\": \"count.invalid.lines\"\n                             },\n-                            \"box-account-id\": {\n-                                \"description\": \"The ID of the Box account who owns the accessed resource. Same as 'User Id' under 'App Info' in the App 'General Settings'.\",\n-                                \"displayName\": \"Account ID\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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+                                \"description\": \"If line by line validation, total number of lines in the source data\",\n+                                \"name\": \"count.total.lines\"\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-M4\"\n-                                }\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-M4\"\n+                                \"description\": \"For flow files routed to invalid, message of the first validation error\",\n+                                \"name\": \"validation.error.message\"\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-framework-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-jetty-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-cdc-mysql-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n+                        ]\n+                    },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-cdc-mysql-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -89651,794 +85688,1132 @@\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+                                \"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-                            \"SSL Context Service\": {\n+                            \"JSON Schema\": {\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"PREFERRED\",\n-                                            \"VERIFY_IDENTITY\",\n-                                            \"REQUIRED\"\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n                                         ],\n-                                        \"propertyDisplayName\": \"SSL Mode\",\n-                                        \"propertyName\": \"SSL Mode\"\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n                                     }\n                                 ],\n-                                \"description\": \"SSL Context Service supporting encrypted socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\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\": \"SSL Context Service\",\n-                                \"required\": false,\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+                            \"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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"JSON Schema Registry\",\n+                                \"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.JsonSchemaRegistry\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"SSL Mode\": {\n+                            \"JSON Schema Version\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Connect without TLS\",\n-                                        \"displayName\": \"DISABLED\",\n-                                        \"value\": \"DISABLED\"\n+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS when server support enabled, otherwise connect without TLS\",\n-                                        \"displayName\": \"PREFERRED\",\n-                                        \"value\": \"PREFERRED\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled\",\n-                                        \"displayName\": \"REQUIRED\",\n-                                        \"value\": \"REQUIRED\"\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n                                     },\n                                     {\n-                                        \"description\": \"Connect with TLS or fail when server support not enabled. Verify server hostname matches presented X.509 certificate names or fail when not matched\",\n-                                        \"displayName\": \"VERIFY_IDENTITY\",\n-                                        \"value\": \"VERIFY_IDENTITY\"\n+                                        \"description\": \"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\": \"DISABLED\",\n-                                \"description\": \"SSL Mode used when SSL Context Service configured supporting certificate verification options\",\n-                                \"displayName\": \"SSL Mode\",\n+                                \"defaultValue\": \"DRAFT_2020_12\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SCHEMA_CONTENT_PROPERTY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n+                                        \"propertyName\": \"Schema Access Strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The JSON schema specification\",\n+                                \"displayName\": \"JSON Schema Version\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"SSL Mode\",\n+                                \"name\": \"JSON Schema Version\",\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+                            \"Schema Access Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured JSON Schema Registry Service.\",\n+                                        \"displayName\": \"Schema Name Property\",\n+                                        \"value\": \"SCHEMA_NAME_PROPERTY\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A URL or file path to the JSON schema or the actual JSON schema is specified by the 'JSON Schema' Property. No matter how the JSON schema is specified, it must be a valid JSON schema\",\n+                                        \"displayName\": \"JSON Schema Property\",\n+                                        \"value\": \"SCHEMA_CONTENT_PROPERTY\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SCHEMA_CONTENT_PROPERTY\",\n+                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\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\": \"Schema Access Strategy\",\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-hosts\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Schema Name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n+                            }\n+                        },\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"FlowFiles that are successfully validated against the schema are routed to this relationship\",\n+                                \"name\": \"valid\"\n                             },\n-                            \"capture-change-mysql-include-begin-commit\": {\n+                            {\n+                                \"description\": \"FlowFiles that are not valid according to the specified schema are routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles that cannot be read as JSON are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": true,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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                                 \"allowableValues\": [\n                                     {\n                                         \"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+                                \"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\": \"capture-change-mysql-include-begin-commit\",\n+                                \"name\": \"allow-extra-fields\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-include-ddl-events\": {\n+                            \"coerce-types\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"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+                                \"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\": \"capture-change-mysql-include-ddl-events\",\n+                                \"name\": \"coerce-types\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-gtid\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"invalid-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-M4\"\n+                                }\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-init-seq-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"maximum-validation-details-length\",\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+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for reading incoming data\",\n+                                \"displayName\": \"Record Reader\",\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+                                \"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-M4\"\n+                                }\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+                            \"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\": \"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+                                \"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-M4\"\n+                                }\n                             },\n-                            \"capture-change-mysql-retrieve-all-records\": {\n+                            \"schema-access-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\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\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Name' Property and looking up the schema in the configured Schema Registry\",\n+                                        \"displayName\": \"Use Schema Name Property\",\n+                                        \"value\": \"schema-name-property\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The schema to validate the data against is determined by looking at the 'Schema Text' Property and parsing the schema as an Avro schema\",\n+                                        \"displayName\": \"Use Schema Text Property\",\n+                                        \"value\": \"schema-text-property\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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\": \"reader-schema\",\n+                                \"description\": \"Specifies how to obtain the schema that should be used to validate records\",\n+                                \"displayName\": \"Schema Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-server-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"schema-name\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-state-update-interval\",\n-                                \"required\": 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-M4\"\n+                                }\n+                            },\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\": \"schema-text\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-use-gtid\": {\n+                            \"strict-type-checking\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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\": \"true\",\n+                                \"description\": \"If the incoming data has a Record where a field is not of the correct type, this property determines how to handle the Record. If true, the Record will be considered invalid. If false, the Record will be considered valid and the field will be coerced into the correct type (if possible, according to the type coercion supported by the Record Writer). This property controls how the data is validated against the validation schema.\",\n+                                \"displayName\": \"Strict Type Checking\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"capture-change-mysql-use-gtid\",\n+                                \"name\": \"strict-type-checking\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"capture-change-mysql-username\": {\n-                                \"description\": \"Username to access the MySQL cluster\",\n-                                \"displayName\": \"Username\",\n+                            \"validation-details-attribute-name\": {\n+                                \"description\": \"If specified, when a validation error occurs, this attribute name will be used to leave the details. The number of characters will be limited by the property 'Maximum Validation Details Length'.\",\n+                                \"displayName\": \"Validation Details Attribute Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"capture-change-mysql-username\",\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-                            \"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-                        \"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+                        \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"Records that are valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"valid\"\n+                            },\n+                            {\n+                                \"description\": \"Records that are not valid according to the schema will be routed to this relationship\",\n+                                \"name\": \"invalid\"\n+                            },\n+                            {\n+                                \"description\": \"If the records cannot be read, validated, or written, for any reason, the original FlowFile will be routed to this relationship\",\n+                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\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+                            \"record\",\n+                            \"schema\",\n+                            \"validate\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n-                                \"name\": \"cdc.sequence.id\"\n-                            },\n-                            {\n-                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n-                                \"name\": \"cdc.event.type\"\n+                                \"description\": \"Sets the mime.type attribute to the MIME Type specified by the Record Writer\",\n+                                \"name\": \"mime.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+                                \"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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                    },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-credentials-service-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\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+                        \"multiProcessorUseCases\": [],\n+                        \"primaryNodeOnly\": false,\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+                            \"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\": \"Kerberos Keytab\",\n-                                \"required\": true,\n+                                \"name\": \"Schema File\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n                                     \"cardinality\": \"SINGLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\"\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+                            \"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\": \"Kerberos Principal\",\n-                                \"required\": true,\n+                                \"name\": \"XML Source Attribute\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\n+                        \"restricted\": true,\n+                        \"sideEffectFree\": true,\n+                        \"supportedRelationships\": [\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-M4\"\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-                        \"restricted\": true,\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-                            \"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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-github-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-gcp-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"explicitRestrictions\": [\n+                        \"systemResourceConsiderations\": [\n                             {\n-                                \"explanation\": \"The default configuration can read environment variables and system properties for credentials\",\n-                                \"requiredPermission\": \"access environment credentials\"\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-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"application-default-credentials\": {\n+                        \"tags\": [\n+                            \"schema\",\n+                            \"validation\",\n+                            \"xml\",\n+                            \"xsd\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.standard.ValidateXml\",\n+                        \"typeDescription\": \"Validates XML contained in a FlowFile. By default, the XML is contained in the FlowFile content. If the 'XML Source Attribute' property is set, the XML to be validated is contained in the specified attribute. It is not recommended to use attributes to hold large XML documents; doing so could adversely affect system performance. Full schema validation is performed if the processor is configured with the XSD schema details. Otherwise, the only validation performed is to ensure the XML syntax is correct and well-formed, e.g. all opening tags are properly closed.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"If the flow file is routed to the invalid relationship the attribute will contain the error message resulting from the validation failure.\",\n+                                \"name\": \"validatexml.invalid.error\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-copy-mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"When cached attributes are copied onto released FlowFiles, they replace any matching attributes.\",\n+                                        \"displayName\": \"Replace if present\",\n+                                        \"value\": \"replace\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"Attributes on released FlowFiles are not overwritten by copied cached attributes.\",\n+                                        \"displayName\": \"Keep original\",\n+                                        \"value\": \"keeporiginal\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"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+                                \"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\": \"application-default-credentials\",\n+                                \"name\": \"attribute-copy-mode\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"distributed-cache-service\": {\n+                                \"description\": \"The Controller Service that is used to check for release signals from a corresponding Notify processor\",\n+                                \"displayName\": \"Distributed Cache Service\",\n+                                \"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-M4\"\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+                            \"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\": \"releasable-flowfile-count\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"release-signal-id\",\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+                                \"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-                            \"compute-engine-credentials\": {\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\": \"wait-buffer-count\",\n+                                \"required\": true,\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.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-M4\",\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\": \"19c5be0\"\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                                 \"allowableValues\": [\n                                     {\n                                         \"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+                                \"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\": \"compute-engine-credentials\",\n-                                \"required\": false,\n+                                \"name\": \"Show Deltas\",\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+                            \"reporting-granularity\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"The stats that are reported will reflect up to the last 5 minutes' worth of processing, which will coincide with the stats that are shown in the UI.\",\n+                                        \"displayName\": \"Five Minutes\",\n+                                        \"value\": \"five-minutes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The stats that are reported will be an average of the value per second, gathered over the last 5 minutes. This is essentially obtained by dividing the stats that are shown in the UI by 300 (300 seconds in 5 minutes), with the exception of when NiFi has been running for less than 5 minutes. In that case, the stats will be divided by the amount of time NiFi has been running.\",\n+                                        \"displayName\": \"One Second\",\n+                                        \"value\": \"one-second\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"five-minutes\",\n+                                \"description\": \"When reporting information, specifies the granularity of the metrics to report\",\n+                                \"displayName\": \"Reporting Granularity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"reporting-granularity\",\n                                 \"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-M4\"\n-                                }\n-                            },\n-                            \"service-account-json\": {\n-                                \"description\": \"The raw JSON containing a Service Account keyfile.\",\n-                                \"displayName\": \"Service Account JSON\",\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-standard-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"service-account-json\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Directory Display Name\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"service-account-json-file\": {\n-                                \"description\": \"Path to a file containing a Service Account key file in JSON format.\",\n-                                \"displayName\": \"Service Account JSON File\",\n+                            \"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\": \"service-account-json-file\",\n-                                \"required\": false,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\n-                                    ]\n-                                },\n+                                \"name\": \"Directory Location\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Threshold\",\n+                                \"required\": true,\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-M4\"\n-                            }\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n-                        \"restricted\": true,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"credentials\",\n-                            \"gcp\",\n-                            \"provider\"\n+                            \"disk\",\n+                            \"monitoring\",\n+                            \"repo\",\n+                            \"storage\",\n+                            \"warning\"\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\n                         \"propertyDescriptors\": {\n-                            \"Bucket\": {\n-                                \"defaultValue\": \"${gcs.bucket}\",\n-                                \"description\": \"Bucket of the object.\",\n-                                \"displayName\": \"Bucket\",\n+                            \"Memory Pool\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"G1 Eden Space\",\n+                                        \"value\": \"G1 Eden Space\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\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\": \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Bucket\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Memory Pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"Name of the object.\",\n-                                \"displayName\": \"Name\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Name\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Reporting Interval\",\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+                            \"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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Usage Threshold\",\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-M4\"\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-M4\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.storage.FetchGCSObject\"\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"file\",\n-                            \"gcs\",\n-                            \"resource\"\n+                            \"garbage collection\",\n+                            \"gc\",\n+                            \"heap\",\n+                            \"jvm\",\n+                            \"memory\",\n+                            \"monitor\",\n+                            \"warning\"\n                         ],\n-                        \"type\": \"org.apache.nifi.processors.gcp.storage.GCSFileResourceService\",\n-                        \"typeDescription\": \"Provides a Google Compute Storage (GCS) file resource for other components.\",\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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\n+                    },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-standard-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"group\": \"org.apache.nifi\",\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+                            \"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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Hostname\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"gcp-project-id\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"group-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression matching on the 'group-name' label value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' label value that matches this Regex will not be fetched.\",\n-                                \"displayName\": \"Group Name Pattern\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"group-name-pattern\",\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-                            \"gcp\",\n-                            \"manager\",\n-                            \"secret\"\n+                            \"ganglia\",\n+                            \"stats\"\n                         ],\n-                        \"type\": \"org.apache.nifi.parameter.gcp.GcpSecretManagerParameterProvider\",\n-                        \"typeDescription\": \"Fetches parameters from GCP Secret Manager.  Each secret becomes a Parameter, which can be mapped to a Parameter Group by adding a GCP label named 'group-name'.\",\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-M4\"\n                     }\n-                ],\n+                ]\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-kerberos-iaa-providers-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-hl7-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90451,204 +86826,459 @@\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"GCP Credentials Provider Service\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Character Encoding\",\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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"bigquery-api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"hl7-input-version\",\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+                            \"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\": \"bq.append.record.count\",\n+                                \"name\": \"parse-segment-fields\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.dataset\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"skip-validation\",\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+                            \"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\": \"bq.record.reader\",\n+                                \"name\": \"use-segment-names\",\n                                 \"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-M4\"\n-                                }\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-                            \"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+                            {\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-hl7-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\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\": \"bq.skip.invalid.rows\",\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-                            \"bq.table.name\": {\n-                                \"defaultValue\": \"${bq.table.name}\",\n-                                \"description\": \"BigQuery table name\",\n-                                \"displayName\": \"Table Name\",\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-M4\",\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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-smb-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"bq.table.name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Completion Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"bq.transfer.type\": {\n+                            \"Create Destination Directory\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Use streaming record handling strategy\",\n-                                        \"displayName\": \"STREAM\",\n-                                        \"value\": \"STREAM\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n-                                        \"description\": \"Use batching record handling strategy\",\n-                                        \"displayName\": \"BATCH\",\n-                                        \"value\": \"BATCH\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"STREAM\",\n-                                \"description\": \"Defines the preferred transfer type streaming or batching\",\n-                                \"displayName\": \"Transfer Type\",\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\": \"bq.transfer.type\",\n+                                \"name\": \"Create Destination Directory\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Destination Directory\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-retry-count\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"remote-file\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"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\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"smb-client-provider-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-smb-client-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n                                     \"version\": \"2.0.0-M4\"\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\": \"FlowFiles are routed to this relationship if the Google BigQuery operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched file.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google BigQuery operation.\",\n-                                \"name\": \"success\"\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-                            \"bigquery\",\n-                            \"bq\",\n-                            \"google\",\n-                            \"google cloud\"\n+                            \"cifs\",\n+                            \"fetch\",\n+                            \"files\",\n+                            \"samba\",\n+                            \"smb\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.bigquery.PutBigQuery\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a Google BigQuery table. The processor is record based so the schema that is used is driven by the RecordReader. Attributes that are not matched to the target schema are skipped. Exactly once delivery semantics are achieved via stream offsets.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"Number of records successfully inserted\",\n-                                \"name\": \"bq.records.count\"\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\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90657,335 +87287,383 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n+                        \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Google Doc Export Type\": {\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\": \"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+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"EPUB\",\n-                                        \"value\": \"application/epub+zip\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Documents cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Document, this property specifies the MIME Type to export the document to.\",\n-                                \"displayName\": \"Google Doc Export Type\",\n+                                \"defaultValue\": \"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\": \"Google Doc Export Type\",\n+                                \"name\": \"Ignore Hidden Files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Drawing Export Type\": {\n+                            \"Keep Source File\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PNG\",\n-                                        \"value\": \"image/png\"\n-                                    },\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\": \"JPEG\",\n-                                        \"value\": \"image/jpeg\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SVG\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Drawings cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Drawing, this property specifies the MIME Type to export the drawing to.\",\n-                                \"displayName\": \"Google Drawing Export Type\",\n+                                \"defaultValue\": \"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\": \"Google Drawing Export Type\",\n+                                \"name\": \"Recurse Subdirectories\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Presentation Export Type\": {\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\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Microsoft PowerPoint\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\"\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Plain Text\",\n-                                        \"value\": \"text/plain\"\n+                                        \"displayName\": \"read, delete\",\n+                                        \"value\": \"read, delete\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Presentation\",\n-                                        \"value\": \"application/vnd.oasis.opendocument.presentation\"\n-                                    },\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\": \"PNG (first slide only)\",\n-                                        \"value\": \"image/png\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"JPEG (first slide only)\",\n-                                        \"value\": \"image/jpeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"Scalable Vector Graphics. Only the first slide will be exported.\",\n-                                        \"displayName\": \"SVG (first slide only)\",\n-                                        \"value\": \"image/svg+xml\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"application/pdf\",\n-                                \"description\": \"Google Presentations cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Presentation, this property specifies the MIME Type to export the presentation to.\",\n-                                \"displayName\": \"Google Presentation Export Type\",\n+                                \"defaultValue\": \"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\": \"Google Presentation Export Type\",\n+                                \"name\": \"enable-dfs\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Google Spreadsheet Export Type\": {\n+                            \"smb-dialect\": {\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"AUTO\",\n+                                        \"value\": \"AUTO\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Microsoft Excel\",\n-                                        \"value\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n+                                        \"displayName\": \"SMB 2.0.2\",\n+                                        \"value\": \"SMB_2_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PDF\",\n-                                        \"value\": \"application/pdf\"\n+                                        \"displayName\": \"SMB 2.1\",\n+                                        \"value\": \"SMB_2_1\"\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+                                        \"description\": \"\",\n+                                        \"displayName\": \"SMB 3.0\",\n+                                        \"value\": \"SMB_3_0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Web Page (HTML)\",\n-                                        \"value\": \"text/html\"\n+                                        \"displayName\": \"SMB 3.0.2\",\n+                                        \"value\": \"SMB_3_0_2\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"OpenDocument Spreadsheet\",\n-                                        \"value\": \"application/x-vnd.oasis.opendocument.spreadsheet\"\n+                                        \"displayName\": \"SMB 3.1.1\",\n+                                        \"value\": \"SMB_3_1_1\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"text/csv\",\n-                                \"description\": \"Google Spreadsheets cannot be downloaded directly from Google Drive but instead must be exported to a specified MIME Type. In the event that the incoming FlowFile's MIME Type indicates that the file is a Google Spreadsheet, this property specifies the MIME Type to export the spreadsheet to.\",\n-                                \"displayName\": \"Google Spreadsheet Export Type\",\n+                                \"defaultValue\": \"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\": \"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+                                \"name\": \"smb-dialect\",\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+                            \"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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"timeout\",\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-M4\"\n-                                }\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+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\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+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile will be routed here for each File for which fetch was attempted but failed.\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"description\": \"All files are routed to success\",\n                                 \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"fetch\",\n-                            \"google\",\n-                            \"storage\"\n+                            \"samba, smb, cifs, files, get\"\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+                        \"triggerWhenEmpty\": true,\n+                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n-                            },\n-                            {\n-                                \"description\": \"The name of the file\",\n+                                \"description\": \"The filename is set to the name of the file on the network share\",\n                                 \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\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 last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The 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 error code returned by Google Drive\",\n-                                \"name\": \"error.code\"\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 error message returned by Google Drive\",\n-                                \"name\": \"error.message\"\n+                                \"description\": \"The full path from where a file was picked up. This includes the hostname and the share name\",\n+                                \"name\": \"absolute.path\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -90998,56 +87676,48 @@\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+                            \"directory\": {\n+                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n+                                \"displayName\": \"Input Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"directory\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n                             \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n                                         \"displayName\": \"Tracking Time Window\",\n                                         \"value\": \"window\"\n                                     },\n                                     {\n                                         \"description\": \"Regardless of entities timestamp, all existing entities will be listed at the initial listing activity.\",\n                                         \"displayName\": \"All Available\",\n                                         \"value\": \"all\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"all\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking Initial Listing Target\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n                             \"et-state-cache\": {\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"entities\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Listing Strategy\",\n-                                        \"propertyName\": \"listing-strategy\"\n-                                    }\n-                                ],\n                                 \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n                                 \"displayName\": \"Entity Tracking State Cache\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"et-state-cache\",\n                                 \"required\": false,\n@@ -91057,117 +87727,101 @@\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\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-                            \"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+                            \"file-name-suffix-filter\": {\n+                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n+                                \"displayName\": \"File Name Suffix Filter\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"file-name-suffix-filter\",\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+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"timestamps\",\n                                 \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n                                 \"displayName\": \"Listing Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"listing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-age\": {\n-                                \"defaultValue\": \"0 sec\",\n-                                \"description\": \"The minimum age a file must be in order to be considered; any files younger than this will be ignored.\",\n+                            \"max-file-age\": {\n+                                \"description\": \"Any file older than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Age\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-age\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"max-file-size\": {\n+                                \"description\": \"Any file larger than the given value will be omitted.\",\n+                                \"displayName\": \"Maximum File Size\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"max-file-size\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"min-file-age\": {\n+                                \"defaultValue\": \"5 secs\",\n+                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n                                 \"displayName\": \"Minimum File Age\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-age\",\n+                                \"name\": \"min-file-age\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"proxy-configuration-service\": {\n-                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP + AuthN\",\n-                                \"displayName\": \"Proxy Configuration Service\",\n+                            \"min-file-size\": {\n+                                \"description\": \"Any file smaller than the given value will be omitted.\",\n+                                \"displayName\": \"Minimum File Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n+                                \"name\": \"min-file-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-M4\"\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n@@ -91177,45 +87831,72 @@\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-M4\"\n                                 }\n                             },\n-                            \"recursive-search\": {\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-M4\"\n+                                }\n+                            },\n+                            \"target-system-timestamp-precision\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"description\": \"Automatically detect time unit deterministically based on candidate entries timestamp. Please note that this option may take longer to list entities unnecessarily, if none of entries has a precise precision timestamp. E.g. even if a target system supports millis, if all entries only have timestamps without millis, such as '2017-06-16 09:06:34.000', then its precision is determined as 'seconds'.\",\n+                                        \"displayName\": \"Auto Detect\",\n+                                        \"value\": \"auto-detect\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"description\": \"This option provides the minimum latency for an entry from being available to being listed if target system supports millis, if not, use other options.\",\n+                                        \"displayName\": \"Milliseconds\",\n+                                        \"value\": \"millis\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that does not have millis precision, but has in seconds.\",\n+                                        \"displayName\": \"Seconds\",\n+                                        \"value\": \"seconds\"\n+                                    },\n+                                    {\n+                                        \"description\": \"For a target system that only supports precision in minutes.\",\n+                                        \"displayName\": \"Minutes\",\n+                                        \"value\": \"minutes\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"When 'true', will include list of files from concrete sub-folders (ignores shortcuts). Otherwise, will return only files that have the defined 'Folder ID' as their parent directly. WARNING: The listing may fail if there are too many sub-folders (500+).\",\n-                                \"displayName\": \"Search Recursively\",\n+                                \"defaultValue\": \"auto-detect\",\n+                                \"description\": \"Specify timestamp precision at the target system. Since this processor uses timestamp of entities to decide which should be listed, it is crucial to use the right timestamp precision.\",\n+                                \"displayName\": \"Target System Timestamp Precision\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"recursive-search\",\n+                                \"name\": \"target-system-timestamp-precision\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.PutGoogleDrive\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"The processor stores necessary data to be able to keep track what files have been listed already. What exactly needs to be stored depends on the 'Listing Strategy'. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n                             \"scopes\": [\n                                 \"CLUSTER\"\n                             ]\n                         },\n                         \"supportedRelationships\": [\n                             {\n                                 \"description\": \"All FlowFiles that are received are routed to success\",\n@@ -91227,51 +87908,70 @@\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+                            \"list\",\n+                            \"samba, smb, cifs, files\"\n                         ],\n                         \"triggerSerially\": true,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\",\n-                        \"typeDescription\": \"Performs a listing of concrete files (shortcuts are ignored) in a Google Drive folder. If the 'Record Writer' property is set, a single Output FlowFile is created, and each file in the listing is written as a single record to the output file. Otherwise, for each file in the listing, an individual FlowFile is created, the metadata being written as FlowFile attributes. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. Please see Additional Details to set up access to Google Drive.\",\n+                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n+                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The id of the file\",\n-                                \"name\": \"drive.id\"\n+                                \"description\": \"The name of the file that was read from filesystem.\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The name of the file\",\n-                                \"name\": \"filename\"\n+                                \"description\": \"The short name of the file that was read from filesystem.\",\n+                                \"name\": \"shortName\"\n                             },\n                             {\n-                                \"description\": \"The MIME type of the file\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The size of the file\",\n-                                \"name\": \"drive.size\"\n+                                \"description\": \"The SMB URL of the share.\",\n+                                \"name\": \"serviceLocation\"\n                             },\n                             {\n-                                \"description\": \"The last modified time or created time (whichever is greater) of the file. The reason for this is that the original modified date of a file is preserved when uploaded to Google Drive. 'Created time' takes the time when the upload occurs. However uploaded files can still be modified later.\",\n-                                \"name\": \"drive.timestamp\"\n+                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastModifiedTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"creationTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"lastAccessTime\"\n+                            },\n+                            {\n+                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n+                                \"name\": \"changeTime\"\n+                            },\n+                            {\n+                                \"description\": \"The size of the file in bytes.\",\n+                                \"name\": \"size\"\n+                            },\n+                            {\n+                                \"description\": \"The number of bytes allocated for the file on the server.\",\n+                                \"name\": \"allocationSize\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-smb-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -91284,562 +87984,769 @@\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\": \"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+                            \"Batch Size\": {\n+                                \"defaultValue\": \"100\",\n+                                \"description\": \"The maximum number of files to put in each iteration\",\n+                                \"displayName\": \"Batch Size\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"chunked-upload-size\",\n+                                \"name\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Conflict Resolution Strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"replace\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"ignore\",\n+                                        \"value\": \"ignore\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"replace\",\n+                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n+                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Conflict Resolution Strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Create Missing Directories\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"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\": \"Create Missing Directories\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Directory\": {\n+                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n+                                \"displayName\": \"Directory\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Directory\",\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+                            \"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\": \"chunked-upload-threshold\",\n+                                \"name\": \"Domain\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"conflict-resolution-strategy\": {\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+                            \"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+                            \"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\": \"Handle file conflict as failure.\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"none\",\n+                                        \"value\": \"none\"\n                                     },\n                                     {\n-                                        \"description\": \"Ignore conflict, do not change the original file.\",\n-                                        \"displayName\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"read\",\n+                                        \"value\": \"read\"\n                                     },\n                                     {\n-                                        \"description\": \"Replace existing file in case of conflict.\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\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\": \"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+                                \"defaultValue\": \"none\",\n+                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n+                                \"displayName\": \"Share Access Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"conflict-resolution-strategy\",\n+                                \"name\": \"Share Access Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name\": {\n-                                \"defaultValue\": \"${filename}\",\n-                                \"description\": \"The name of the file to upload to the specified Google Drive folder.\",\n-                                \"displayName\": \"Filename\",\n+                            \"Temporary Suffix\": {\n+                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n+                                \"displayName\": \"Temporary Suffix\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"file-name\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Temporary Suffix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Username\": {\n+                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n+                                \"displayName\": \"Username\",\n+                                \"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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"folder-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"smb-dialect\",\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+                            \"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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"timeout\",\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-M4\"\n-                                }\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+                            \"use-encryption\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n+                                \"displayName\": \"Use Encryption\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"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-M4\"\n-                                }\n+                                \"name\": \"use-encryption\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the Google Drive object.\",\n+                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n                                 \"name\": \"filename\"\n                             }\n                         ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.drive.FetchGoogleDrive\",\n-                            \"org.apache.nifi.processors.gcp.drive.ListGoogleDrive\"\n+                            \"org.apache.nifi.processors.smb.FetchSmb\",\n+                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n+                            \"org.apache.nifi.processors.smb.ListSmb\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Files that have been successfully written to Google Drive are transferred to this relationship.\",\n+                                \"description\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\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\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"drive\",\n-                            \"google\",\n-                            \"put\",\n-                            \"storage\"\n+                            \"samba, smb, cifs, files, put\"\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.smb.PutSmbFile\",\n+                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n                         \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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 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-                        \"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+                            \"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\": \"GCP Credentials Provider Service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n+                            \"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\": \"api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-charset\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-connect-timeout\",\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+                            \"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\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"el-cs-enable-compression\",\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+                            \"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\": \"gcp-pubsub-subscription\",\n+                                \"name\": \"el-cs-http-hosts\",\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+                            \"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\": \"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-M4\"\n-                                }\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.PublishGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"consume\",\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"message\",\n-                            \"pubsub\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\",\n-                        \"typeDescription\": \"Consumes message from the configured Google Cloud PubSub subscription. If the 'Batch Size' is set, the configured number of messages will be pulled in a single request, else only one message will be pulled.\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                                \"name\": \"el-cs-node-selector\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             },\n-                            {\n-                                \"description\": \"Timestamp value when the message was published\",\n-                                \"name\": \"gcp.pubsub.publishTime\"\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+                                \"required\": false,\n+                                \"sensitive\": true\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n-                        \"dynamicProperties\": [\n-                            {\n-                                \"description\": \"Attributes to be set for the outgoing Google Cloud PubSub message\",\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"name\": \"Attribute name\",\n-                                \"value\": \"Value to be set to the attribute\"\n-                            }\n-                        ],\n-                        \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n-                        \"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+                            \"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\": \"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-M4\"\n-                                }\n+                                \"name\": \"el-cs-path-prefix\",\n+                                \"required\": false,\n+                                \"sensitive\": false\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+                            \"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\": \"Input Batch Size\",\n+                                \"name\": \"el-cs-send-meta-header\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Maximum Message Size\": {\n-                                \"defaultValue\": \"1 MB\",\n-                                \"dependencies\": [\n+                            \"el-cs-sniff-cluster-nodes\": {\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\": \"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\": \"Maximum Message Size\",\n+                                \"name\": \"el-cs-sniff-cluster-nodes\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Message Derivation Strategy\": {\n+                            \"el-cs-sniff-failure\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"Message Derivation Strategy\",\n+                                \"name\": \"el-cs-sniff-failure\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Record Reader\": {\n+                            \"el-cs-sniffer-failure-delay\": {\n+                                \"defaultValue\": \"1 min\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"propertyDisplayName\": \"Sniff on Failure\",\n+                                        \"propertyName\": \"el-cs-sniff-failure\"\n                                     }\n                                 ],\n-                                \"description\": \"The Record Reader to use for incoming FlowFiles\",\n-                                \"displayName\": \"Record Reader\",\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\": \"Record Reader\",\n+                                \"name\": \"el-cs-sniffer-failure-delay\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"Record Writer\": {\n+                            \"el-cs-sniffer-interval\": {\n+                                \"defaultValue\": \"5 mins\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"RECORD_ORIENTED\"\n+                                            \"true\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Message Derivation Strategy\",\n-                                        \"propertyName\": \"Message Derivation Strategy\"\n+                                        \"propertyDisplayName\": \"Sniff Cluster Nodes\",\n+                                        \"propertyName\": \"el-cs-sniff-cluster-nodes\"\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\": \"Interval between Cluster sniffer operations\",\n+                                \"displayName\": \"Sniffer Interval\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Record Writer\",\n+                                \"name\": \"el-cs-sniffer-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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"api-endpoint\": {\n-                                \"defaultValue\": \"pubsub.googleapis.com:443\",\n-                                \"description\": \"Override the gRPC endpoint in the form of [host:port]\",\n-                                \"displayName\": \"API Endpoint\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"api-endpoint\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-sniffer-request-timeout\",\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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-socket-timeout\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-project-id\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"el-cs-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-M4\"\n+                                }\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+                            \"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\": \"gcp-pubsub-publish-batch-delay\",\n+                                \"name\": \"el-cs-strict-deprecation\",\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+                            \"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\": \"gcp-pubsub-publish-batch-size\",\n+                                \"name\": \"el-cs-suppress-nulls\",\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+                            \"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\": \"gcp-pubsub-topic\",\n-                                \"required\": true,\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 + AuthN\",\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@@ -91847,522 +88754,331 @@\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             }\n                         },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.ConsumeGCPubSub\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship 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+                        \"providedApiImplementations\": [\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+                                \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n+                                \"version\": \"2.0.0-M4\"\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 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+                            \"client\",\n+                            \"elasticsearch\",\n+                            \"elasticsearch6\",\n+                            \"elasticsearch7\",\n+                            \"elasticsearch8\"\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-M4\",\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.elasticsearch.ElasticSearchClientServiceImpl\",\n+                        \"typeDescription\": \"A controller service for accessing an Elasticsearch client, using the Elasticsearch (low-level) REST Client.\",\n+                        \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": \"* * * * * ?\",\n-                            \"TIMER_DRIVEN\": \"0 sec\"\n-                        },\n-                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n-                        \"defaultYieldDuration\": \"1 sec\",\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Retrieves an object using JSONPath from the result document and places it in the return Record at the specified Record Path.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"A JSONPath expression\",\n+                                \"value\": \"A Record Path expression\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_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-M4\"\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-                                \"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+                            \"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\": \"gcp-messages-outstanding\",\n+                                \"name\": \"el-lookup-index\",\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+                            \"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\": \"gcp-pubsub-subscription\",\n-                                \"required\": true,\n+                                \"name\": \"el-lookup-type\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.pubsub.lite.PublishGCPubSubLite\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Pub/Sub operation.\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"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-M4\",\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\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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+                            \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"el-rest-client-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-batch-bytes\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"schema-access-strategy\",\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+                            \"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\": \"gcp-ordering-key\",\n+                                \"name\": \"schema-branch\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcp-pubsub-publish-batch-delay\": {\n-                                \"defaultValue\": \"100 millis\",\n-                                \"description\": \"Indicates the delay threshold to use for batching. After this amount of time has elapsed (counting from the first element added), the elements will be wrapped up in a batch and sent. This value should not be set too high, usually on the order of milliseconds. Otherwise, calls might appear to never complete.\",\n-                                \"displayName\": \"Batch Delay Threshold\",\n+                            \"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\": \"gcp-pubsub-publish-batch-delay\",\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-                            \"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+                            \"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\": \"gcp-pubsub-publish-batch-size\",\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-M4\"\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-                            \"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+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"gcp-pubsub-topic\",\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-                        \"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 if the Google Cloud Pub/Sub operation fails.\",\n-                                \"name\": \"failure\"\n-                            },\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.lookup.LookupService\",\n+                                \"version\": \"2.0.0-M4\"\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 entirety of the FlowFile's content will be read into memory to be sent as a PubSub message.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"gcp\",\n-                            \"google\",\n-                            \"google-cloud\",\n-                            \"lite\",\n-                            \"message\",\n-                            \"publish\",\n-                            \"pubsub\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"lookup\",\n+                            \"record\"\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-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\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+                        \"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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-elasticsearch-client-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-M4\"\n-                                }\n-                            },\n-                            \"gcp-project-id\": {\n-                                \"description\": \"Google Cloud Project ID\",\n-                                \"displayName\": \"Project ID\",\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\": \"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-                                \"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\": \"el-lookup-index\",\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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-generation\",\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-                            \"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-                            \"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+                            \"el-rest-client-service\": {\n+                                \"description\": \"An ElasticSearch client service to use for running queries.\",\n+                                \"displayName\": \"Client Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"proxy-configuration-service\",\n-                                \"required\": false,\n+                                \"name\": \"el-rest-client-service\",\n+                                \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"artifact\": \"nifi-elasticsearch-client-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"type\": \"org.apache.nifi.elasticsearch.ElasticSearchClientService\",\n                                     \"version\": \"2.0.0-M4\"\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-                        \"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+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\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-M4\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\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-M4\"\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-                            \"delete\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"storage\"\n+                            \"elasticsearch\",\n+                            \"enrich\",\n+                            \"key\",\n+                            \"lookup\",\n+                            \"value\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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+                        \"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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92372,142 +89088,44 @@\n                             \"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 \\\"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\": \"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+                        \"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+                            \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"2.0.0-M4\"\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-                                \"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-                                \"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+                            \"file\": {\n+                                \"defaultValue\": \"${dropbox.id}\",\n+                                \"description\": \"The Dropbox identifier or path of the Dropbox file to fetch. The 'File' should match the following regular expression pattern: /.*|id:.* . When ListDropbox is used for input, either '${dropbox.id}' (identifying files by Dropbox id) or '${path}/${filename}' (identifying files by path) can be used as 'File' value.\",\n+                                \"displayName\": \"File\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"gcs-key\",\n+                                \"name\": \"file\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n                                 \"name\": \"proxy-configuration-service\",\n@@ -92515,166 +89133,85 @@\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-M4\"\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                         \"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+                            \"org.apache.nifi.processors.dropbox.ListDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"A FlowFile will be routed here for each successfully fetched File.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\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+                            \"dropbox\",\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.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.dropbox.FetchDropbox\",\n+                        \"typeDescription\": \"Fetches files from Dropbox. Designed to be used in tandem with ListDropbox.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file, parsed if possible from the Content-Disposition response header\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"Bucket of the object.\",\n-                                \"name\": \"gcs.bucket\"\n-                            },\n-                            {\n-                                \"description\": \"Name of the object.\",\n-                                \"name\": \"gcs.key\"\n-                            },\n-                            {\n-                                \"description\": \"Size of the object.\",\n-                                \"name\": \"gcs.size\"\n-                            },\n-                            {\n-                                \"description\": \"Data cache control of the object.\",\n-                                \"name\": \"gcs.cache.control\"\n-                            },\n-                            {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n-                            },\n-                            {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n-                            },\n-                            {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n-                            },\n-                            {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n-                            },\n-                            {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The CRC32C checksum of object's data, encoded in base64 in big-endian order.\",\n-                                \"name\": \"gcs.crc32c\"\n-                            },\n-                            {\n-                                \"description\": \"The creation time of the object (milliseconds)\",\n-                                \"name\": \"gcs.create.time\"\n-                            },\n-                            {\n-                                \"description\": \"The last modification time of the object (milliseconds)\",\n-                                \"name\": \"gcs.update.time\"\n-                            },\n-                            {\n-                                \"description\": \"The algorithm used to encrypt the object.\",\n-                                \"name\": \"gcs.encryption.algorithm\"\n-                            },\n-                            {\n-                                \"description\": \"The SHA256 hash of the key used to encrypt the object\",\n-                                \"name\": \"gcs.encryption.sha256\"\n-                            },\n-                            {\n-                                \"description\": \"The HTTP 1.1 Entity tag for the object.\",\n-                                \"name\": \"gcs.etag\"\n-                            },\n-                            {\n-                                \"description\": \"The service-generated for the object\",\n-                                \"name\": \"gcs.generated.id\"\n-                            },\n-                            {\n-                                \"description\": \"The data generation of the object.\",\n-                                \"name\": \"gcs.generation\"\n+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"The MD5 hash of the object's data encoded in base64.\",\n-                                \"name\": \"gcs.md5\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -92687,27 +89224,27 @@\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+                            \"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\": \"GCP Credentials Provider Service\",\n+                                \"name\": \"dropbox-credential-service\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                     \"version\": \"2.0.0-M4\"\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@@ -92751,135 +89288,98 @@\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\": true,\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n                                     \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n                                     \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n                             \"et-time-window\": {\n                                 \"defaultValue\": \"3 hours\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"window\"\n+                                            \"entities\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Entity Tracking Initial Listing Target\",\n-                                        \"propertyName\": \"et-initial-listing-target\"\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\": 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-                                \"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+                            \"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\": \"gcs-prefix\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-use-generations\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Specifies whether to use GCS Generations, if applicable.  If false, only the latest version of each object will be returned.\",\n-                                \"displayName\": \"Use Generations\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-use-generations\",\n+                                \"name\": \"folder\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n                             \"listing-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. 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+                                        \"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 '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+                                        \"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 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+                                        \"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@@ -92904,167 +89404,104 @@\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-M4\"\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+                            \"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\": \"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\": \"recursive-search\",\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+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.PutDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"stateful\": {\n-                            \"description\": \"After performing a listing of 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\": \"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\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\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-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"list\",\n+                            \"dropbox\",\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+                        \"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-M4\",\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+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The media download link to the object.\",\n-                                \"name\": \"gcs.media.link\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The metageneration of the object.\",\n-                                \"name\": \"gcs.metageneration\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The owner (uploader) of the object.\",\n-                                \"name\": \"gcs.owner\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The ACL entity type of the uploader of the object.\",\n-                                \"name\": \"gcs.owner.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\n                             },\n                             {\n-                                \"description\": \"The URI of the object as a string.\",\n-                                \"name\": \"gcs.uri\"\n+                                \"description\": \"Revision of the file\",\n+                                \"name\": \"dropbox.revision\"\n                             }\n                         ]\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-dropbox-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93072,278 +89509,105 @@\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-                                \"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-M4\"\n-                                }\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-M4\"\n-                                }\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+                            \"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\": \"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+                                \"name\": \"chunked-upload-size\",\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+                            \"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\": \"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-                                \"required\": true,\n+                                \"name\": \"chunked-upload-threshold\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"gcs-content-disposition-type\": {\n+                            \"conflict-resolution-strategy\": {\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\": \"Handle file conflict as failure.\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"fail\"\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\": \"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-                                \"description\": \"Type of RFC-6266 Content Disposition to be attached to the object\",\n-                                \"displayName\": \"Content Disposition Type\",\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\": \"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\": \"conflict-resolution-strategy\",\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\": \"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-                                    },\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-                                \"description\": \"Access Control to be attached to the object uploaded. Not providing this will revert to bucket defaults.\",\n-                                \"displayName\": \"Object ACL\",\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\": \"gcs-object-acl\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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-M4\"\n+                                }\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+                            \"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\": \"gcs-object-crc32c\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n-                            },\n-                            \"gcs-overwrite-object\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"If false, the upload to GCS will succeed only if the object does not exist.\",\n-                                \"displayName\": \"Overwrite Object\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcs-overwrite-object\",\n+                                \"name\": \"file-name\",\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+                            \"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\": \"gcs-server-side-encryption-key\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n-                            },\n-                            \"gzip.content.enabled\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Signals to the GCS Blob Writer whether GZIP compression during transfer is desired. False means do not gzip and can boost performance in many cases.\",\n-                                \"displayName\": \"GZIP Compression Enabled\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gzip.content.enabled\",\n-                                \"required\": false,\n+                                \"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@@ -93353,372 +89617,336 @@\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-M4\"\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                         \"readsAttributes\": [\n                             {\n-                                \"description\": \"Uses the FlowFile's filename as the filename for the GCS object\",\n+                                \"description\": \"Uses the FlowFile's filename as the filename for the Dropbox 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+                            \"org.apache.nifi.processors.dropbox.FetchDropbox\",\n+                            \"org.apache.nifi.processors.dropbox.ListDropbox\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship if the Google Cloud Storage operation fails.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Dropbox are transferred to this relationship.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to this relationship after a successful Google Cloud Storage operation.\",\n-                                \"name\": \"success\"\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\": true,\n+                        \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"archive\",\n-                            \"gcs\",\n-                            \"google\",\n-                            \"google cloud\",\n-                            \"put\"\n+                            \"dropbox\",\n+                            \"put\",\n+                            \"storage\"\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+                        \"type\": \"org.apache.nifi.processors.dropbox.PutDropbox\",\n+                        \"typeDescription\": \"Puts content to a Dropbox folder.\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\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+                                \"description\": \"The error message returned by Dropbox\",\n+                                \"name\": \"error.message\"\n                             },\n                             {\n-                                \"description\": \"The number of components which make up the object.\",\n-                                \"name\": \"gcs.component.count\"\n+                                \"description\": \"The Dropbox identifier of the file\",\n+                                \"name\": \"dropbox.id\"\n                             },\n                             {\n-                                \"description\": \"The data content disposition of the object.\",\n-                                \"name\": \"gcs.content.disposition\"\n+                                \"description\": \"The folder path where the file is located\",\n+                                \"name\": \"path\"\n                             },\n                             {\n-                                \"description\": \"The content encoding of the object.\",\n-                                \"name\": \"gcs.content.encoding\"\n+                                \"description\": \"The name of the file\",\n+                                \"name\": \"filename\"\n                             },\n                             {\n-                                \"description\": \"The content language of the object.\",\n-                                \"name\": \"gcs.content.language\"\n+                                \"description\": \"The size of the file\",\n+                                \"name\": \"dropbox.size\"\n                             },\n                             {\n-                                \"description\": \"The MIME/Content-Type of the object\",\n-                                \"name\": \"mime.type\"\n+                                \"description\": \"The server modified time of the file\",\n+                                \"name\": \"dropbox.timestamp\"\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+                                \"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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-github-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jms-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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 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-                        \"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+                            \"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\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\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+                            \"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-                        \"readsAttributes\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation designated by the Vision server.\",\n-                                \"name\": \"operationKey\"\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-M4\"\n                             }\n                         ],\n+                        \"restricted\": true,\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-                            {\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+                            \"org.apache.nifi.jms.processors.ConsumeJMS\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"integration\",\n+                            \"jms\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\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.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-M4\"\n                     },\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\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\": \"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-                        \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"gcp-credentials-provider-service\",\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-                                \"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-M4\"\n-                                }\n+                                \"sensitive\": false\n                             },\n-                            \"operationKey\": {\n-                                \"defaultValue\": \"${operationKey}\",\n-                                \"description\": \"The unique identifier of the Vision operation.\",\n-                                \"displayName\": \"GCP Operation Key\",\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"operationKey\",\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-                        },\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+                            \"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-                            {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\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+                        },\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"Upon successful completion, the original FlowFile will be routed to this relationship.\",\n-                                \"name\": \"original\"\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-M4\"\n                             }\n                         ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\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-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"integration\",\n+                            \"jms\",\n+                            \"jndi\",\n+                            \"messaging\",\n+                            \"publish\",\n+                            \"queue\",\n+                            \"subscribe\",\n+                            \"topic\"\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.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-M4\"\n-                    },\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93726,112 +89954,525 @@\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-                            \"gcp-credentials-provider-service\": {\n-                                \"description\": \"The Controller Service used to obtain Google Cloud Platform credentials.\",\n-                                \"displayName\": \"GCP Credentials Provider Service\",\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\": \"gcp-credentials-provider-service\",\n+                                \"name\": \"Acknowledgement Mode\",\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-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"json-payload\",\n+                                \"name\": \"Destination Name\",\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+                                \"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\": \"\",\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+                                \"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-                            \"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+                            \"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\": \"output-bucket\",\n+                                \"name\": \"Error Queue Name\",\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+                            \"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-M4\"\n+                                }\n+                            },\n+                            \"Shared subscription\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"If destination is Topic if present then make it the consumer shared. @see https://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\": \"vision-feature-type\",\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\": \"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+                                \"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-M4\"\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+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             }\n                         },\n+                        \"restricted\": true,\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.gcp.vision.GetGcpVisionAnnotateFilesOperationStatus\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.PublishJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles that are received from the JMS Destination are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"If a message cannot be parsed using the configured Record Reader, the contents of the message will be routed to this Relationship as its own individual FlowFile.\",\n+                                \"name\": \"parse.failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"consume\",\n+                            \"get\",\n+                            \"jms\",\n+                            \"message\",\n+                            \"receive\"\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.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\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\": true,\n-                        \"artifact\": \"nifi-gcp-nar\",\n+                        \"artifact\": \"nifi-jms-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -93839,3661 +90480,5298 @@\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_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+                            \"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\": \"gcp-credentials-provider-service\",\n-                                \"required\": true,\n+                                \"name\": \"Connection Factory Service\",\n+                                \"required\": false,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-gcp-services-api-nar\",\n+                                    \"artifact\": \"nifi-jms-cf-service-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.gcp.credentials.service.GCPCredentialsService\",\n+                                    \"type\": \"org.apache.nifi.jms.cf.JMSConnectionFactoryProviderDefinition\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"json-payload\",\n+                                \"name\": \"Destination Name\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Destination Type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"Password used for authentication and authorization.\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"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-M4\"\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-                            \"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+                            \"allow-illegal-chars-in-jms-header-names\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether illegal characters in header names should be sent to the JMS broker. Usually hyphens and full-stops.\",\n+                                \"displayName\": \"Allow Illegal Characters in Header Names\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"output-bucket\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"attributes-to-send-as-jms-headers-regex\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"broker\": {\n+                                \"description\": \"URI pointing to the network location of the JMS Message broker. Example for ActiveMQ: 'tcp://myhost:61616'. Examples for IBM MQ: 'myhost(1414)' and 'myhost01(1414),myhost02(1414)'.\",\n+                                \"displayName\": \"JMS Broker URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"broker\",\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+                            \"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\": \"vision-feature-type\",\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+                            \"message-body-type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"bytes\",\n+                                        \"value\": \"bytes\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"text\",\n+                                        \"value\": \"text\"\n+                                    }\n+                                ],\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\": \"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+                            \"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-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Record Writer to use for serializing Records before publishing them as an JMS Message.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"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-M4\"\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+                            {\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.processors.gcp.vision.GetGcpVisionAnnotateImagesOperationStatus\"\n+                            \"org.apache.nifi.jms.cf.JMSConnectionFactoryProvider\",\n+                            \"org.apache.nifi.jms.processors.ConsumeJMS\"\n                         ],\n                         \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"FlowFiles are routed to success relationship\",\n+                                \"description\": \"All FlowFiles that are sent to the JMS destination are routed to this relationship\",\n                                 \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"FlowFiles are routed to failure relationship\",\n+                                \"description\": \"All FlowFiles that cannot be sent to JMS destination are routed to this relationship\",\n                                 \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsDynamicRelationships\": false,\n                         \"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-                            \"Cloud\",\n-                            \"Google\",\n-                            \"Machine Learning\",\n-                            \"Vision\"\n+                            \"jms\",\n+                            \"message\",\n+                            \"publish\",\n+                            \"put\",\n+                            \"send\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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.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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"A unique identifier of the operation returned by the Vision server.\",\n-                                \"name\": \"operationKey\"\n-                            }\n-                        ]\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-splunk-nar\",\n+            \"artifact\": \"nifi-snmp-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"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_ALLOWED\",\n                         \"multiProcessorUseCases\": [],\n                         \"primaryNodeOnly\": false,\n                         \"propertyDescriptors\": {\n-                            \"Application\": {\n-                                \"description\": \"The Splunk Application to query.\",\n-                                \"displayName\": \"Application\",\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\": \"Application\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-authentication-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Connection Timeout\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"Max wait time for connection to the Splunk server.\",\n-                                \"displayName\": \"Connection Timeout\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Connection Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-authentication-protocol\",\n+                                \"required\": true,\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+                            \"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\": \"Earliest Time\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Hostname\": {\n+                            \"snmp-hostname\": {\n                                 \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\n+                                \"description\": \"Hostname or network address of the SNMP Agent.\",\n+                                \"displayName\": \"SNMP Agent Hostname\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"snmp-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+                            \"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\": \"Latest Time\",\n+                                \"name\": \"snmp-oid\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Mode\": {\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\": \"\",\n-                                        \"displayName\": \"ATOM\",\n-                                        \"value\": \"ATOM\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CSV\",\n-                                        \"value\": \"CSV\"\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\": \"\",\n-                                        \"displayName\": \"JSON\",\n-                                        \"value\": \"JSON\"\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\": \"\",\n-                                        \"displayName\": \"JSON_COLS\",\n-                                        \"value\": \"JSON_COLS\"\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\": \"\",\n-                                        \"displayName\": \"JSON_ROWS\",\n-                                        \"value\": \"JSON_ROWS\"\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\": \"\",\n-                                        \"displayName\": \"RAW\",\n-                                        \"value\": \"RAW\"\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\": \"\",\n-                                        \"displayName\": \"XML\",\n-                                        \"value\": \"XML\"\n+                                        \"dependentValues\": [\n+                                            \"authPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"JSON\",\n-                                \"description\": \"The output mode for the results.\",\n-                                \"displayName\": \"Output Mode\",\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\": \"Output Mode\",\n+                                \"name\": \"snmp-private-protocol\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\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\": \"Owner\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n+                                \"name\": \"snmp-private-protocol-passphrase\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n+                                \"name\": \"snmp-retries\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8089\",\n-                                \"description\": \"The port of the Splunk server.\",\n-                                \"displayName\": \"Port\",\n+                            \"snmp-security-level\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"SNMP version 3 provides extra security with User Based Security Model (USM). The three levels of security is 1. Communication without authentication and encryption (NoAuthNoPriv). 2. Communication with authentication and without encryption (AuthNoPriv). 3. Communication with authentication and encryption (AuthPriv).\",\n+                                \"displayName\": \"SNMP Security Level\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Port\",\n+                                \"name\": \"snmp-security-level\",\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+                            \"snmp-security-name\": {\n+                                \"dependencies\": [\n+                                    {\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"User name used for SNMP v3 Authentication.\",\n+                                \"displayName\": \"SNMP Security Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Query\",\n+                                \"name\": \"snmp-security-name\",\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+                            \"snmp-strategy\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of a variable. A response with the current value returned.\",\n+                                        \"displayName\": \"GET\",\n+                                        \"value\": \"GET\"\n+                                    },\n+                                    {\n+                                        \"description\": \"A manager-to-agent request to retrieve the value of multiple variables. Snmp WALK also traverses all subnodes under the specified OID.\",\n+                                        \"displayName\": \"WALK\",\n+                                        \"value\": \"WALK\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"GET\",\n+                                \"description\": \"SNMP strategy to use (SNMP Get or SNMP Walk)\",\n+                                \"displayName\": \"SNMP Strategy\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Read Timeout\",\n-                                \"required\": false,\n+                                \"name\": \"snmp-strategy\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"The SSL Context Service used to provide client certificate information for TLS/SSL connections.\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"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\": \"SSL Context Service\",\n+                                \"name\": \"snmp-textual-oid\",\n                                 \"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-M4\"\n-                                }\n+                                \"sensitive\": false\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+                            \"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\": \"Scheme\",\n-                                \"required\": true,\n+                                \"name\": \"snmp-timeout\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\n+                            \"snmp-version\": {\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+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\n+                                        \"description\": \"SNMP version 3 with improved security\",\n+                                        \"displayName\": \"v3\",\n+                                        \"value\": \"SNMPv3\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"Security Protocol\",\n-                                \"required\": false,\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-                            \"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\": \"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+                            \"get\",\n+                            \"oid\",\n+                            \"snmp\",\n+                            \"walk\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"Response variable binding: OID (e.g. 1.3.6.1.4.1.343) and its value.\",\n+                                \"name\": \"snmp$<OID>\"\n+                            },\n+                            {\n+                                \"description\": \"Denotes the variable binding in which the error occured.\",\n+                                \"name\": \"snmp$errorIndex\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j error status of the PDU.\",\n+                                \"name\": \"snmp$errorStatus\"\n+                            },\n+                            {\n+                                \"description\": \"The description of error status.\",\n+                                \"name\": \"snmp$errorStatusText\"\n+                            },\n+                            {\n+                                \"description\": \"The number of non repeater variable bindings in a GETBULK PDU (currently not supported).\",\n+                                \"name\": \"snmp$nonRepeaters\"\n+                            },\n+                            {\n+                                \"description\": \"The request ID associated with the PDU.\",\n+                                \"name\": \"snmp$requestID\"\n+                            },\n+                            {\n+                                \"description\": \"The snmp4j numeric representation of the type of the PDU.\",\n+                                \"name\": \"snmp$type\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the PDU type.\",\n+                                \"name\": \"snmp$typeString\"\n+                            },\n+                            {\n+                                \"description\": \"This attribute will exist if and only if the strategy is GET and will be equal to the value given in Textual Oid property.\",\n+                                \"name\": \"snmp$textualOid\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"snmp-community\": {\n+                                \"defaultValue\": \"public\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"Search based on the time the event was indexed in Splunk.\",\n-                                        \"displayName\": \"Index Time\",\n-                                        \"value\": \"Index Time\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\",\n+                                            \"SNMPv2c\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\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+                                \"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\": \"Time Field Strategy\",\n+                                \"name\": \"snmp-community\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"snmp-manager-port\": {\n+                                \"description\": \"The port where the SNMP Manager listens to the incoming traps.\",\n+                                \"displayName\": \"SNMP Manager Port\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-manager-port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Time Range Strategy\": {\n+                            \"snmp-security-level\": {\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\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\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\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\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\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\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\": \"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\": \"Time Range Strategy\",\n+                                \"name\": \"snmp-security-level\",\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-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Dar_es_Salaam\",\n-                                        \"value\": \"Africa/Dar_es_Salaam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Djibouti\",\n-                                        \"value\": \"Africa/Djibouti\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Douala\",\n-                                        \"value\": \"Africa/Douala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/El_Aaiun\",\n-                                        \"value\": \"Africa/El_Aaiun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Freetown\",\n-                                        \"value\": \"Africa/Freetown\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Gaborone\",\n-                                        \"value\": \"Africa/Gaborone\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Harare\",\n-                                        \"value\": \"Africa/Harare\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Johannesburg\",\n-                                        \"value\": \"Africa/Johannesburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Juba\",\n-                                        \"value\": \"Africa/Juba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kampala\",\n-                                        \"value\": \"Africa/Kampala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Khartoum\",\n-                                        \"value\": \"Africa/Khartoum\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kigali\",\n-                                        \"value\": \"Africa/Kigali\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Kinshasa\",\n-                                        \"value\": \"Africa/Kinshasa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lagos\",\n-                                        \"value\": \"Africa/Lagos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Libreville\",\n-                                        \"value\": \"Africa/Libreville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lome\",\n-                                        \"value\": \"Africa/Lome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Luanda\",\n-                                        \"value\": \"Africa/Luanda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lubumbashi\",\n-                                        \"value\": \"Africa/Lubumbashi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Lusaka\",\n-                                        \"value\": \"Africa/Lusaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Malabo\",\n-                                        \"value\": \"Africa/Malabo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maputo\",\n-                                        \"value\": \"Africa/Maputo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Maseru\",\n-                                        \"value\": \"Africa/Maseru\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mbabane\",\n-                                        \"value\": \"Africa/Mbabane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Mogadishu\",\n-                                        \"value\": \"Africa/Mogadishu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Monrovia\",\n-                                        \"value\": \"Africa/Monrovia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nairobi\",\n-                                        \"value\": \"Africa/Nairobi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ndjamena\",\n-                                        \"value\": \"Africa/Ndjamena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Niamey\",\n-                                        \"value\": \"Africa/Niamey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Nouakchott\",\n-                                        \"value\": \"Africa/Nouakchott\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Ouagadougou\",\n-                                        \"value\": \"Africa/Ouagadougou\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Porto-Novo\",\n-                                        \"value\": \"Africa/Porto-Novo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Sao_Tome\",\n-                                        \"value\": \"Africa/Sao_Tome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Timbuktu\",\n-                                        \"value\": \"Africa/Timbuktu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tripoli\",\n-                                        \"value\": \"Africa/Tripoli\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Tunis\",\n-                                        \"value\": \"Africa/Tunis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Africa/Windhoek\",\n-                                        \"value\": \"Africa/Windhoek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Adak\",\n-                                        \"value\": \"America/Adak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anchorage\",\n-                                        \"value\": \"America/Anchorage\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Anguilla\",\n-                                        \"value\": \"America/Anguilla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Antigua\",\n-                                        \"value\": \"America/Antigua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Araguaina\",\n-                                        \"value\": \"America/Araguaina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Buenos_Aires\",\n-                                        \"value\": \"America/Argentina/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Catamarca\",\n-                                        \"value\": \"America/Argentina/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/ComodRivadavia\",\n-                                        \"value\": \"America/Argentina/ComodRivadavia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Cordoba\",\n-                                        \"value\": \"America/Argentina/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Jujuy\",\n-                                        \"value\": \"America/Argentina/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/La_Rioja\",\n-                                        \"value\": \"America/Argentina/La_Rioja\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Mendoza\",\n-                                        \"value\": \"America/Argentina/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Rio_Gallegos\",\n-                                        \"value\": \"America/Argentina/Rio_Gallegos\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Salta\",\n-                                        \"value\": \"America/Argentina/Salta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Juan\",\n-                                        \"value\": \"America/Argentina/San_Juan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/San_Luis\",\n-                                        \"value\": \"America/Argentina/San_Luis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Tucuman\",\n-                                        \"value\": \"America/Argentina/Tucuman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Argentina/Ushuaia\",\n-                                        \"value\": \"America/Argentina/Ushuaia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Aruba\",\n-                                        \"value\": \"America/Aruba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Asuncion\",\n-                                        \"value\": \"America/Asuncion\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atikokan\",\n-                                        \"value\": \"America/Atikokan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Atka\",\n-                                        \"value\": \"America/Atka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia\",\n-                                        \"value\": \"America/Bahia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bahia_Banderas\",\n-                                        \"value\": \"America/Bahia_Banderas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Barbados\",\n-                                        \"value\": \"America/Barbados\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belem\",\n-                                        \"value\": \"America/Belem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Belize\",\n-                                        \"value\": \"America/Belize\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Blanc-Sablon\",\n-                                        \"value\": \"America/Blanc-Sablon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boa_Vista\",\n-                                        \"value\": \"America/Boa_Vista\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Bogota\",\n-                                        \"value\": \"America/Bogota\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Boise\",\n-                                        \"value\": \"America/Boise\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Buenos_Aires\",\n-                                        \"value\": \"America/Buenos_Aires\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cambridge_Bay\",\n-                                        \"value\": \"America/Cambridge_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Campo_Grande\",\n-                                        \"value\": \"America/Campo_Grande\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cancun\",\n-                                        \"value\": \"America/Cancun\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Caracas\",\n-                                        \"value\": \"America/Caracas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Catamarca\",\n-                                        \"value\": \"America/Catamarca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayenne\",\n-                                        \"value\": \"America/Cayenne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cayman\",\n-                                        \"value\": \"America/Cayman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chicago\",\n-                                        \"value\": \"America/Chicago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Chihuahua\",\n-                                        \"value\": \"America/Chihuahua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ciudad_Juarez\",\n-                                        \"value\": \"America/Ciudad_Juarez\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Coral_Harbour\",\n-                                        \"value\": \"America/Coral_Harbour\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cordoba\",\n-                                        \"value\": \"America/Cordoba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Costa_Rica\",\n-                                        \"value\": \"America/Costa_Rica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Creston\",\n-                                        \"value\": \"America/Creston\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Cuiaba\",\n-                                        \"value\": \"America/Cuiaba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Curacao\",\n-                                        \"value\": \"America/Curacao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Danmarkshavn\",\n-                                        \"value\": \"America/Danmarkshavn\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson\",\n-                                        \"value\": \"America/Dawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dawson_Creek\",\n-                                        \"value\": \"America/Dawson_Creek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Denver\",\n-                                        \"value\": \"America/Denver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Detroit\",\n-                                        \"value\": \"America/Detroit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Dominica\",\n-                                        \"value\": \"America/Dominica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Edmonton\",\n-                                        \"value\": \"America/Edmonton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Eirunepe\",\n-                                        \"value\": \"America/Eirunepe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/El_Salvador\",\n-                                        \"value\": \"America/El_Salvador\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ensenada\",\n-                                        \"value\": \"America/Ensenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Nelson\",\n-                                        \"value\": \"America/Fort_Nelson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fort_Wayne\",\n-                                        \"value\": \"America/Fort_Wayne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Fortaleza\",\n-                                        \"value\": \"America/Fortaleza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Glace_Bay\",\n-                                        \"value\": \"America/Glace_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Godthab\",\n-                                        \"value\": \"America/Godthab\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Goose_Bay\",\n-                                        \"value\": \"America/Goose_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grand_Turk\",\n-                                        \"value\": \"America/Grand_Turk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Grenada\",\n-                                        \"value\": \"America/Grenada\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guadeloupe\",\n-                                        \"value\": \"America/Guadeloupe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guatemala\",\n-                                        \"value\": \"America/Guatemala\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guayaquil\",\n-                                        \"value\": \"America/Guayaquil\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Guyana\",\n-                                        \"value\": \"America/Guyana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Halifax\",\n-                                        \"value\": \"America/Halifax\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Havana\",\n-                                        \"value\": \"America/Havana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Hermosillo\",\n-                                        \"value\": \"America/Hermosillo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Indianapolis\",\n-                                        \"value\": \"America/Indiana/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Knox\",\n-                                        \"value\": \"America/Indiana/Knox\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Marengo\",\n-                                        \"value\": \"America/Indiana/Marengo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Petersburg\",\n-                                        \"value\": \"America/Indiana/Petersburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Tell_City\",\n-                                        \"value\": \"America/Indiana/Tell_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vevay\",\n-                                        \"value\": \"America/Indiana/Vevay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Vincennes\",\n-                                        \"value\": \"America/Indiana/Vincennes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indiana/Winamac\",\n-                                        \"value\": \"America/Indiana/Winamac\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Indianapolis\",\n-                                        \"value\": \"America/Indianapolis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Inuvik\",\n-                                        \"value\": \"America/Inuvik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Iqaluit\",\n-                                        \"value\": \"America/Iqaluit\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jamaica\",\n-                                        \"value\": \"America/Jamaica\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Jujuy\",\n-                                        \"value\": \"America/Jujuy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Juneau\",\n-                                        \"value\": \"America/Juneau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Louisville\",\n-                                        \"value\": \"America/Kentucky/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kentucky/Monticello\",\n-                                        \"value\": \"America/Kentucky/Monticello\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Knox_IN\",\n-                                        \"value\": \"America/Knox_IN\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Kralendijk\",\n-                                        \"value\": \"America/Kralendijk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/La_Paz\",\n-                                        \"value\": \"America/La_Paz\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lima\",\n-                                        \"value\": \"America/Lima\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Los_Angeles\",\n-                                        \"value\": \"America/Los_Angeles\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Louisville\",\n-                                        \"value\": \"America/Louisville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Lower_Princes\",\n-                                        \"value\": \"America/Lower_Princes\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Maceio\",\n-                                        \"value\": \"America/Maceio\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Managua\",\n-                                        \"value\": \"America/Managua\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Manaus\",\n-                                        \"value\": \"America/Manaus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Marigot\",\n-                                        \"value\": \"America/Marigot\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Martinique\",\n-                                        \"value\": \"America/Martinique\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Matamoros\",\n-                                        \"value\": \"America/Matamoros\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mazatlan\",\n-                                        \"value\": \"America/Mazatlan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mendoza\",\n-                                        \"value\": \"America/Mendoza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Menominee\",\n-                                        \"value\": \"America/Menominee\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Merida\",\n-                                        \"value\": \"America/Merida\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Metlakatla\",\n-                                        \"value\": \"America/Metlakatla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Mexico_City\",\n-                                        \"value\": \"America/Mexico_City\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Miquelon\",\n-                                        \"value\": \"America/Miquelon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Moncton\",\n-                                        \"value\": \"America/Moncton\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Monterrey\",\n-                                        \"value\": \"America/Monterrey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montevideo\",\n-                                        \"value\": \"America/Montevideo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montreal\",\n-                                        \"value\": \"America/Montreal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Montserrat\",\n-                                        \"value\": \"America/Montserrat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nassau\",\n-                                        \"value\": \"America/Nassau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/New_York\",\n-                                        \"value\": \"America/New_York\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nipigon\",\n-                                        \"value\": \"America/Nipigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nome\",\n-                                        \"value\": \"America/Nome\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Noronha\",\n-                                        \"value\": \"America/Noronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Beulah\",\n-                                        \"value\": \"America/North_Dakota/Beulah\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/Center\",\n-                                        \"value\": \"America/North_Dakota/Center\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/North_Dakota/New_Salem\",\n-                                        \"value\": \"America/North_Dakota/New_Salem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Nuuk\",\n-                                        \"value\": \"America/Nuuk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Ojinaga\",\n-                                        \"value\": \"America/Ojinaga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Panama\",\n-                                        \"value\": \"America/Panama\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Pangnirtung\",\n-                                        \"value\": \"America/Pangnirtung\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Paramaribo\",\n-                                        \"value\": \"America/Paramaribo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Phoenix\",\n-                                        \"value\": \"America/Phoenix\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port-au-Prince\",\n-                                        \"value\": \"America/Port-au-Prince\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Port_of_Spain\",\n-                                        \"value\": \"America/Port_of_Spain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Acre\",\n-                                        \"value\": \"America/Porto_Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Porto_Velho\",\n-                                        \"value\": \"America/Porto_Velho\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Puerto_Rico\",\n-                                        \"value\": \"America/Puerto_Rico\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Punta_Arenas\",\n-                                        \"value\": \"America/Punta_Arenas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rainy_River\",\n-                                        \"value\": \"America/Rainy_River\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rankin_Inlet\",\n-                                        \"value\": \"America/Rankin_Inlet\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Recife\",\n-                                        \"value\": \"America/Recife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Regina\",\n-                                        \"value\": \"America/Regina\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Resolute\",\n-                                        \"value\": \"America/Resolute\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rio_Branco\",\n-                                        \"value\": \"America/Rio_Branco\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Rosario\",\n-                                        \"value\": \"America/Rosario\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santa_Isabel\",\n-                                        \"value\": \"America/Santa_Isabel\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santarem\",\n-                                        \"value\": \"America/Santarem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santiago\",\n-                                        \"value\": \"America/Santiago\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Santo_Domingo\",\n-                                        \"value\": \"America/Santo_Domingo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sao_Paulo\",\n-                                        \"value\": \"America/Sao_Paulo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Scoresbysund\",\n-                                        \"value\": \"America/Scoresbysund\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Shiprock\",\n-                                        \"value\": \"America/Shiprock\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Sitka\",\n-                                        \"value\": \"America/Sitka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Barthelemy\",\n-                                        \"value\": \"America/St_Barthelemy\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Johns\",\n-                                        \"value\": \"America/St_Johns\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Kitts\",\n-                                        \"value\": \"America/St_Kitts\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Lucia\",\n-                                        \"value\": \"America/St_Lucia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Thomas\",\n-                                        \"value\": \"America/St_Thomas\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/St_Vincent\",\n-                                        \"value\": \"America/St_Vincent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Swift_Current\",\n-                                        \"value\": \"America/Swift_Current\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tegucigalpa\",\n-                                        \"value\": \"America/Tegucigalpa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thule\",\n-                                        \"value\": \"America/Thule\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Thunder_Bay\",\n-                                        \"value\": \"America/Thunder_Bay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tijuana\",\n-                                        \"value\": \"America/Tijuana\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Toronto\",\n-                                        \"value\": \"America/Toronto\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Tortola\",\n-                                        \"value\": \"America/Tortola\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Vancouver\",\n-                                        \"value\": \"America/Vancouver\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Virgin\",\n-                                        \"value\": \"America/Virgin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Whitehorse\",\n-                                        \"value\": \"America/Whitehorse\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Winnipeg\",\n-                                        \"value\": \"America/Winnipeg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yakutat\",\n-                                        \"value\": \"America/Yakutat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"America/Yellowknife\",\n-                                        \"value\": \"America/Yellowknife\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Casey\",\n-                                        \"value\": \"Antarctica/Casey\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Davis\",\n-                                        \"value\": \"Antarctica/Davis\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/DumontDUrville\",\n-                                        \"value\": \"Antarctica/DumontDUrville\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Macquarie\",\n-                                        \"value\": \"Antarctica/Macquarie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Mawson\",\n-                                        \"value\": \"Antarctica/Mawson\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/McMurdo\",\n-                                        \"value\": \"Antarctica/McMurdo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Palmer\",\n-                                        \"value\": \"Antarctica/Palmer\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Rothera\",\n-                                        \"value\": \"Antarctica/Rothera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/South_Pole\",\n-                                        \"value\": \"Antarctica/South_Pole\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Syowa\",\n-                                        \"value\": \"Antarctica/Syowa\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Troll\",\n-                                        \"value\": \"Antarctica/Troll\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Antarctica/Vostok\",\n-                                        \"value\": \"Antarctica/Vostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Arctic/Longyearbyen\",\n-                                        \"value\": \"Arctic/Longyearbyen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aden\",\n-                                        \"value\": \"Asia/Aden\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Almaty\",\n-                                        \"value\": \"Asia/Almaty\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Amman\",\n-                                        \"value\": \"Asia/Amman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Anadyr\",\n-                                        \"value\": \"Asia/Anadyr\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtau\",\n-                                        \"value\": \"Asia/Aqtau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Aqtobe\",\n-                                        \"value\": \"Asia/Aqtobe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashgabat\",\n-                                        \"value\": \"Asia/Ashgabat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ashkhabad\",\n-                                        \"value\": \"Asia/Ashkhabad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Atyrau\",\n-                                        \"value\": \"Asia/Atyrau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baghdad\",\n-                                        \"value\": \"Asia/Baghdad\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bahrain\",\n-                                        \"value\": \"Asia/Bahrain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Baku\",\n-                                        \"value\": \"Asia/Baku\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bangkok\",\n-                                        \"value\": \"Asia/Bangkok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Barnaul\",\n-                                        \"value\": \"Asia/Barnaul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Beirut\",\n-                                        \"value\": \"Asia/Beirut\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Bishkek\",\n-                                        \"value\": \"Asia/Bishkek\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Brunei\",\n-                                        \"value\": \"Asia/Brunei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Calcutta\",\n-                                        \"value\": \"Asia/Calcutta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chita\",\n-                                        \"value\": \"Asia/Chita\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Choibalsan\",\n-                                        \"value\": \"Asia/Choibalsan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chongqing\",\n-                                        \"value\": \"Asia/Chongqing\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Chungking\",\n-                                        \"value\": \"Asia/Chungking\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Colombo\",\n-                                        \"value\": \"Asia/Colombo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dacca\",\n-                                        \"value\": \"Asia/Dacca\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Damascus\",\n-                                        \"value\": \"Asia/Damascus\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dhaka\",\n-                                        \"value\": \"Asia/Dhaka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dili\",\n-                                        \"value\": \"Asia/Dili\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dubai\",\n-                                        \"value\": \"Asia/Dubai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Dushanbe\",\n-                                        \"value\": \"Asia/Dushanbe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Famagusta\",\n-                                        \"value\": \"Asia/Famagusta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Gaza\",\n-                                        \"value\": \"Asia/Gaza\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Harbin\",\n-                                        \"value\": \"Asia/Harbin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hebron\",\n-                                        \"value\": \"Asia/Hebron\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ho_Chi_Minh\",\n-                                        \"value\": \"Asia/Ho_Chi_Minh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hong_Kong\",\n-                                        \"value\": \"Asia/Hong_Kong\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Hovd\",\n-                                        \"value\": \"Asia/Hovd\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Irkutsk\",\n-                                        \"value\": \"Asia/Irkutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Istanbul\",\n-                                        \"value\": \"Asia/Istanbul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jakarta\",\n-                                        \"value\": \"Asia/Jakarta\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jayapura\",\n-                                        \"value\": \"Asia/Jayapura\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Jerusalem\",\n-                                        \"value\": \"Asia/Jerusalem\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kabul\",\n-                                        \"value\": \"Asia/Kabul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kamchatka\",\n-                                        \"value\": \"Asia/Kamchatka\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Karachi\",\n-                                        \"value\": \"Asia/Karachi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kashgar\",\n-                                        \"value\": \"Asia/Kashgar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kathmandu\",\n-                                        \"value\": \"Asia/Kathmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Katmandu\",\n-                                        \"value\": \"Asia/Katmandu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Khandyga\",\n-                                        \"value\": \"Asia/Khandyga\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kolkata\",\n-                                        \"value\": \"Asia/Kolkata\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Krasnoyarsk\",\n-                                        \"value\": \"Asia/Krasnoyarsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuala_Lumpur\",\n-                                        \"value\": \"Asia/Kuala_Lumpur\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuching\",\n-                                        \"value\": \"Asia/Kuching\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Kuwait\",\n-                                        \"value\": \"Asia/Kuwait\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macao\",\n-                                        \"value\": \"Asia/Macao\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Macau\",\n-                                        \"value\": \"Asia/Macau\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Magadan\",\n-                                        \"value\": \"Asia/Magadan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Makassar\",\n-                                        \"value\": \"Asia/Makassar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Manila\",\n-                                        \"value\": \"Asia/Manila\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Muscat\",\n-                                        \"value\": \"Asia/Muscat\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Nicosia\",\n-                                        \"value\": \"Asia/Nicosia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novokuznetsk\",\n-                                        \"value\": \"Asia/Novokuznetsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Novosibirsk\",\n-                                        \"value\": \"Asia/Novosibirsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Omsk\",\n-                                        \"value\": \"Asia/Omsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Oral\",\n-                                        \"value\": \"Asia/Oral\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Phnom_Penh\",\n-                                        \"value\": \"Asia/Phnom_Penh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pontianak\",\n-                                        \"value\": \"Asia/Pontianak\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Pyongyang\",\n-                                        \"value\": \"Asia/Pyongyang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qatar\",\n-                                        \"value\": \"Asia/Qatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qostanay\",\n-                                        \"value\": \"Asia/Qostanay\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Qyzylorda\",\n-                                        \"value\": \"Asia/Qyzylorda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Rangoon\",\n-                                        \"value\": \"Asia/Rangoon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Riyadh\",\n-                                        \"value\": \"Asia/Riyadh\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Saigon\",\n-                                        \"value\": \"Asia/Saigon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Sakhalin\",\n-                                        \"value\": \"Asia/Sakhalin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Samarkand\",\n-                                        \"value\": \"Asia/Samarkand\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Seoul\",\n-                                        \"value\": \"Asia/Seoul\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Shanghai\",\n-                                        \"value\": \"Asia/Shanghai\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Singapore\",\n-                                        \"value\": \"Asia/Singapore\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Srednekolymsk\",\n-                                        \"value\": \"Asia/Srednekolymsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Taipei\",\n-                                        \"value\": \"Asia/Taipei\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tashkent\",\n-                                        \"value\": \"Asia/Tashkent\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tbilisi\",\n-                                        \"value\": \"Asia/Tbilisi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tehran\",\n-                                        \"value\": \"Asia/Tehran\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tel_Aviv\",\n-                                        \"value\": \"Asia/Tel_Aviv\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimbu\",\n-                                        \"value\": \"Asia/Thimbu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Thimphu\",\n-                                        \"value\": \"Asia/Thimphu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tokyo\",\n-                                        \"value\": \"Asia/Tokyo\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Tomsk\",\n-                                        \"value\": \"Asia/Tomsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ujung_Pandang\",\n-                                        \"value\": \"Asia/Ujung_Pandang\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulaanbaatar\",\n-                                        \"value\": \"Asia/Ulaanbaatar\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ulan_Bator\",\n-                                        \"value\": \"Asia/Ulan_Bator\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Urumqi\",\n-                                        \"value\": \"Asia/Urumqi\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Ust-Nera\",\n-                                        \"value\": \"Asia/Ust-Nera\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vientiane\",\n-                                        \"value\": \"Asia/Vientiane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Vladivostok\",\n-                                        \"value\": \"Asia/Vladivostok\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yakutsk\",\n-                                        \"value\": \"Asia/Yakutsk\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yangon\",\n-                                        \"value\": \"Asia/Yangon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yekaterinburg\",\n-                                        \"value\": \"Asia/Yekaterinburg\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Asia/Yerevan\",\n-                                        \"value\": \"Asia/Yerevan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Azores\",\n-                                        \"value\": \"Atlantic/Azores\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Bermuda\",\n-                                        \"value\": \"Atlantic/Bermuda\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Canary\",\n-                                        \"value\": \"Atlantic/Canary\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Cape_Verde\",\n-                                        \"value\": \"Atlantic/Cape_Verde\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faeroe\",\n-                                        \"value\": \"Atlantic/Faeroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Faroe\",\n-                                        \"value\": \"Atlantic/Faroe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Jan_Mayen\",\n-                                        \"value\": \"Atlantic/Jan_Mayen\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Madeira\",\n-                                        \"value\": \"Atlantic/Madeira\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Reykjavik\",\n-                                        \"value\": \"Atlantic/Reykjavik\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/South_Georgia\",\n-                                        \"value\": \"Atlantic/South_Georgia\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/St_Helena\",\n-                                        \"value\": \"Atlantic/St_Helena\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Atlantic/Stanley\",\n-                                        \"value\": \"Atlantic/Stanley\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/ACT\",\n-                                        \"value\": \"Australia/ACT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Adelaide\",\n-                                        \"value\": \"Australia/Adelaide\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Brisbane\",\n-                                        \"value\": \"Australia/Brisbane\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Broken_Hill\",\n-                                        \"value\": \"Australia/Broken_Hill\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Canberra\",\n-                                        \"value\": \"Australia/Canberra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Currie\",\n-                                        \"value\": \"Australia/Currie\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Darwin\",\n-                                        \"value\": \"Australia/Darwin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Eucla\",\n-                                        \"value\": \"Australia/Eucla\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Hobart\",\n-                                        \"value\": \"Australia/Hobart\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/LHI\",\n-                                        \"value\": \"Australia/LHI\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lindeman\",\n-                                        \"value\": \"Australia/Lindeman\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Lord_Howe\",\n-                                        \"value\": \"Australia/Lord_Howe\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Melbourne\",\n-                                        \"value\": \"Australia/Melbourne\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/NSW\",\n-                                        \"value\": \"Australia/NSW\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/North\",\n-                                        \"value\": \"Australia/North\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Perth\",\n-                                        \"value\": \"Australia/Perth\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Queensland\",\n-                                        \"value\": \"Australia/Queensland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/South\",\n-                                        \"value\": \"Australia/South\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Sydney\",\n-                                        \"value\": \"Australia/Sydney\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Tasmania\",\n-                                        \"value\": \"Australia/Tasmania\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Victoria\",\n-                                        \"value\": \"Australia/Victoria\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/West\",\n-                                        \"value\": \"Australia/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Australia/Yancowinna\",\n-                                        \"value\": \"Australia/Yancowinna\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/Acre\",\n-                                        \"value\": \"Brazil/Acre\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/DeNoronha\",\n-                                        \"value\": \"Brazil/DeNoronha\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/East\",\n-                                        \"value\": \"Brazil/East\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Brazil/West\",\n-                                        \"value\": \"Brazil/West\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CET\",\n-                                        \"value\": \"CET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CST6CDT\",\n-                                        \"value\": \"CST6CDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Atlantic\",\n-                                        \"value\": \"Canada/Atlantic\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Central\",\n-                                        \"value\": \"Canada/Central\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Eastern\",\n-                                        \"value\": \"Canada/Eastern\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Mountain\",\n-                                        \"value\": \"Canada/Mountain\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Newfoundland\",\n-                                        \"value\": \"Canada/Newfoundland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Pacific\",\n-                                        \"value\": \"Canada/Pacific\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Saskatchewan\",\n-                                        \"value\": \"Canada/Saskatchewan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Canada/Yukon\",\n-                                        \"value\": \"Canada/Yukon\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/Continental\",\n-                                        \"value\": \"Chile/Continental\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Chile/EasterIsland\",\n-                                        \"value\": \"Chile/EasterIsland\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Cuba\",\n-                                        \"value\": \"Cuba\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EET\",\n-                                        \"value\": \"EET\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EST5EDT\",\n-                                        \"value\": \"EST5EDT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Egypt\",\n-                                        \"value\": \"Egypt\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Eire\",\n-                                        \"value\": \"Eire\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT\",\n-                                        \"value\": \"Etc/GMT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+0\",\n-                                        \"value\": \"Etc/GMT+0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+1\",\n-                                        \"value\": \"Etc/GMT+1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+10\",\n-                                        \"value\": \"Etc/GMT+10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+11\",\n-                                        \"value\": \"Etc/GMT+11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+12\",\n-                                        \"value\": \"Etc/GMT+12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+2\",\n-                                        \"value\": \"Etc/GMT+2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+3\",\n-                                        \"value\": \"Etc/GMT+3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+4\",\n-                                        \"value\": \"Etc/GMT+4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+5\",\n-                                        \"value\": \"Etc/GMT+5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+6\",\n-                                        \"value\": \"Etc/GMT+6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+7\",\n-                                        \"value\": \"Etc/GMT+7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+8\",\n-                                        \"value\": \"Etc/GMT+8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT+9\",\n-                                        \"value\": \"Etc/GMT+9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-0\",\n-                                        \"value\": \"Etc/GMT-0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-1\",\n-                                        \"value\": \"Etc/GMT-1\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-10\",\n-                                        \"value\": \"Etc/GMT-10\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-11\",\n-                                        \"value\": \"Etc/GMT-11\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-12\",\n-                                        \"value\": \"Etc/GMT-12\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-13\",\n-                                        \"value\": \"Etc/GMT-13\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-14\",\n-                                        \"value\": \"Etc/GMT-14\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-2\",\n-                                        \"value\": \"Etc/GMT-2\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-3\",\n-                                        \"value\": \"Etc/GMT-3\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-4\",\n-                                        \"value\": \"Etc/GMT-4\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-5\",\n-                                        \"value\": \"Etc/GMT-5\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-6\",\n-                                        \"value\": \"Etc/GMT-6\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-7\",\n-                                        \"value\": \"Etc/GMT-7\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-8\",\n-                                        \"value\": \"Etc/GMT-8\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT-9\",\n-                                        \"value\": \"Etc/GMT-9\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/GMT0\",\n-                                        \"value\": \"Etc/GMT0\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Greenwich\",\n-                                        \"value\": \"Etc/Greenwich\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UCT\",\n-                                        \"value\": \"Etc/UCT\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/UTC\",\n-                                        \"value\": \"Etc/UTC\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Universal\",\n-                                        \"value\": \"Etc/Universal\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Etc/Zulu\",\n-                                        \"value\": \"Etc/Zulu\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Amsterdam\",\n-                                        \"value\": \"Europe/Amsterdam\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Andorra\",\n-                                        \"value\": \"Europe/Andorra\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Astrakhan\",\n-                                        \"value\": \"Europe/Astrakhan\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Athens\",\n-                                        \"value\": \"Europe/Athens\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belfast\",\n-                                        \"value\": \"Europe/Belfast\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Belgrade\",\n-                                        \"value\": \"Europe/Belgrade\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Berlin\",\n-                                        \"value\": \"Europe/Berlin\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bratislava\",\n-                                        \"value\": \"Europe/Bratislava\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Brussels\",\n-                                        \"value\": \"Europe/Brussels\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Bucharest\",\n-                                        \"value\": \"Europe/Bucharest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Budapest\",\n-                                        \"value\": \"Europe/Budapest\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Busingen\",\n-                                        \"value\": \"Europe/Busingen\"\n-                                    },\n+                            \"snmp-usm-security-names\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Chisinau\",\n-                                        \"value\": \"Europe/Chisinau\"\n+                                        \"dependentValues\": [\n+                                            \"usm-security-names\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Copenhagen\",\n-                                        \"value\": \"Europe/Copenhagen\"\n+                                        \"dependentValues\": [\n+                                            \"noAuthNoPriv\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Security Level\",\n+                                        \"propertyName\": \"snmp-security-level\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Dublin\",\n-                                        \"value\": \"Europe/Dublin\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"Security names listed separated by commas in SNMPv3. Check Usage for more details.\",\n+                                \"displayName\": \"SNMP Users Security Names\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-security-names\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-usm-users-file-path\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Gibraltar\",\n-                                        \"value\": \"Europe/Gibraltar\"\n+                                        \"dependentValues\": [\n+                                            \"usm-json-file-path\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Guernsey\",\n-                                        \"value\": \"Europe/Guernsey\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Helsinki\",\n-                                        \"value\": \"Europe/Helsinki\"\n+                                        \"dependentValues\": [\n+                                            \"usm-json-content\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"USM Users Source\",\n+                                        \"propertyName\": \"snmp-usm-users-source\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Isle_of_Man\",\n-                                        \"value\": \"Europe/Isle_of_Man\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\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\": true\n+                            },\n+                            \"snmp-usm-users-source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Istanbul\",\n-                                        \"value\": \"Europe/Istanbul\"\n+                                        \"description\": \"The JSON containing the USM users\",\n+                                        \"displayName\": \"Json Content\",\n+                                        \"value\": \"usm-json-content\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Jersey\",\n-                                        \"value\": \"Europe/Jersey\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Kaliningrad\",\n-                                        \"value\": \"Europe/Kaliningrad\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Kiev\",\n-                                        \"value\": \"Europe/Kiev\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"SNMPv3\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n+                                    }\n+                                ],\n+                                \"description\": \"The ways to provide USM User data\",\n+                                \"displayName\": \"USM Users Source\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"snmp-usm-users-source\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"snmp-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kirov\",\n-                                        \"value\": \"Europe/Kirov\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Kyiv\",\n-                                        \"value\": \"Europe/Kyiv\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Lisbon\",\n-                                        \"value\": \"Europe/Lisbon\"\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+                        \"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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Ljubljana\",\n-                                        \"value\": \"Europe/Ljubljana\"\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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/London\",\n-                                        \"value\": \"Europe/London\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Luxembourg\",\n-                                        \"value\": \"Europe/Luxembourg\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Madrid\",\n-                                        \"value\": \"Europe/Madrid\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Malta\",\n-                                        \"value\": \"Europe/Malta\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Mariehamn\",\n-                                        \"value\": \"Europe/Mariehamn\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Minsk\",\n-                                        \"value\": \"Europe/Minsk\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Monaco\",\n-                                        \"value\": \"Europe/Monaco\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Moscow\",\n-                                        \"value\": \"Europe/Moscow\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Nicosia\",\n-                                        \"value\": \"Europe/Nicosia\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Oslo\",\n-                                        \"value\": \"Europe/Oslo\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Paris\",\n-                                        \"value\": \"Europe/Paris\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Podgorica\",\n-                                        \"value\": \"Europe/Podgorica\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Prague\",\n-                                        \"value\": \"Europe/Prague\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Riga\",\n-                                        \"value\": \"Europe/Riga\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Rome\",\n-                                        \"value\": \"Europe/Rome\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Samara\",\n-                                        \"value\": \"Europe/Samara\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/San_Marino\",\n-                                        \"value\": \"Europe/San_Marino\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Sarajevo\",\n-                                        \"value\": \"Europe/Sarajevo\"\n-                                    },\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Saratov\",\n-                                        \"value\": \"Europe/Saratov\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Simferopol\",\n-                                        \"value\": \"Europe/Simferopol\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Skopje\",\n-                                        \"value\": \"Europe/Skopje\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Sofia\",\n-                                        \"value\": \"Europe/Sofia\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Stockholm\",\n-                                        \"value\": \"Europe/Stockholm\"\n+                                        \"description\": \"A coldStart trap signifies that the sending protocol entity is reinitializing itself such that the agent's configuration or the protocol entity implementation may be altered\",\n+                                        \"displayName\": \"Cold Start\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Tallinn\",\n-                                        \"value\": \"Europe/Tallinn\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Tirane\",\n-                                        \"value\": \"Europe/Tirane\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Tiraspol\",\n-                                        \"value\": \"Europe/Tiraspol\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Ulyanovsk\",\n-                                        \"value\": \"Europe/Ulyanovsk\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Uzhgorod\",\n-                                        \"value\": \"Europe/Uzhgorod\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Vaduz\",\n-                                        \"value\": \"Europe/Vaduz\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Vatican\",\n-                                        \"value\": \"Europe/Vatican\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Vienna\",\n-                                        \"value\": \"Europe/Vienna\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Vilnius\",\n-                                        \"value\": \"Europe/Vilnius\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Volgograd\",\n-                                        \"value\": \"Europe/Volgograd\"\n+                                        \"dependentValues\": [\n+                                            \"SNMPv1\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"SNMP Version\",\n+                                        \"propertyName\": \"snmp-version\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Warsaw\",\n-                                        \"value\": \"Europe/Warsaw\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"6\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Generic Trap Type\",\n+                                        \"propertyName\": \"snmp-trap-generic-type\"\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\": \"\",\n-                                        \"displayName\": \"Europe/Zagreb\",\n-                                        \"value\": \"Europe/Zagreb\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zaporozhye\",\n-                                        \"value\": \"Europe/Zaporozhye\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Europe/Zurich\",\n-                                        \"value\": \"Europe/Zurich\"\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+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that 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+                            \"send\",\n+                            \"snmp\",\n+                            \"trap\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-snmp-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                            \"snmp-authentication-passphrase\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB\",\n-                                        \"value\": \"GB\"\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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GB-Eire\",\n-                                        \"value\": \"GB-Eire\"\n+                                        \"description\": \"Provides authentication based on the HMAC-MD5 algorithm.\",\n+                                        \"displayName\": \"MD5\",\n+                                        \"value\": \"MD5\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT\",\n-                                        \"value\": \"GMT\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA algorithm.\",\n+                                        \"displayName\": \"SHA\",\n+                                        \"value\": \"SHA\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"GMT0\",\n-                                        \"value\": \"GMT0\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA224\",\n+                                        \"value\": \"HMAC128SHA224\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Greenwich\",\n-                                        \"value\": \"Greenwich\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA256\",\n+                                        \"value\": \"HMAC192SHA256\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Hongkong\",\n-                                        \"value\": \"Hongkong\"\n+                                        \"description\": \"Provides authentication based on the HMAC-SHA-2 algorithm.\",\n+                                        \"displayName\": \"SHA384\",\n+                                        \"value\": \"HMAC256SHA384\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iceland\",\n-                                        \"value\": \"Iceland\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Antananarivo\",\n-                                        \"value\": \"Indian/Antananarivo\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Chagos\",\n-                                        \"value\": \"Indian/Chagos\"\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-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\": \"\",\n-                                        \"displayName\": \"Indian/Christmas\",\n-                                        \"value\": \"Indian/Christmas\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Cocos\",\n-                                        \"value\": \"Indian/Cocos\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Comoro\",\n-                                        \"value\": \"Indian/Comoro\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Kerguelen\",\n-                                        \"value\": \"Indian/Kerguelen\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Mahe\",\n-                                        \"value\": \"Indian/Mahe\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Maldives\",\n-                                        \"value\": \"Indian/Maldives\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Mauritius\",\n-                                        \"value\": \"Indian/Mauritius\"\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\": \"\",\n-                                        \"displayName\": \"Indian/Mayotte\",\n-                                        \"value\": \"Indian/Mayotte\"\n+                                        \"description\": \"Communication without authentication and privacy.\",\n+                                        \"displayName\": \"noAuthNoPriv\",\n+                                        \"value\": \"noAuthNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Indian/Reunion\",\n-                                        \"value\": \"Indian/Reunion\"\n+                                        \"description\": \"Communication with authentication and without privacy.\",\n+                                        \"displayName\": \"authNoPriv\",\n+                                        \"value\": \"authNoPriv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Iran\",\n-                                        \"value\": \"Iran\"\n-                                    },\n+                                        \"description\": \"Communication with authentication and privacy.\",\n+                                        \"displayName\": \"authPriv\",\n+                                        \"value\": \"authPriv\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"noAuthNoPriv\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Israel\",\n-                                        \"value\": \"Israel\"\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\": \"\",\n-                                        \"displayName\": \"Jamaica\",\n-                                        \"value\": \"Jamaica\"\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-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Japan\",\n-                                        \"value\": \"Japan\"\n+                                        \"description\": \"SNMP version 1\",\n+                                        \"displayName\": \"v1\",\n+                                        \"value\": \"SNMPv1\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Kwajalein\",\n-                                        \"value\": \"Kwajalein\"\n+                                        \"description\": \"SNMP version 2c\",\n+                                        \"displayName\": \"v2c\",\n+                                        \"value\": \"SNMPv2c\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Libya\",\n-                                        \"value\": \"Libya\"\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+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that have been successfully used to perform SNMP Set are routed to this relationship\",\n+                                \"name\": \"success\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that failed during the SNMP Set care routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            }\n+                        ],\n+                        \"supportedSchedulingStrategies\": [\n+                            \"TIMER_DRIVEN\",\n+                            \"CRON_DRIVEN\"\n+                        ],\n+                        \"supportsBatching\": false,\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicRelationships\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"oid\",\n+                            \"set\",\n+                            \"snmp\"\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+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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-M4\"\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\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"key-password\": {\n+                                \"description\": \"Password used for decrypting Private Keys\",\n+                                \"displayName\": \"Key Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-password\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Secret Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Secret Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-pgp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"keyring\": {\n+                                \"description\": \"PGP Keyring or Public Key encoded in ASCII Armor\",\n+                                \"displayName\": \"Keyring\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"keyring\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"keyring-file\": {\n+                                \"description\": \"File path to PGP Keyring or Public Key encoded in binary or ASCII Armor\",\n+                                \"displayName\": \"Keyring File\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-azure-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credential-configuration-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MET\",\n-                                        \"value\": \"MET\"\n+                                        \"description\": \"Uses default credential chain. It first checks environment variables, before trying managed identity.\",\n+                                        \"displayName\": \"Default Credential\",\n+                                        \"value\": \"default-credential\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST7MDT\",\n-                                        \"value\": \"MST7MDT\"\n-                                    },\n+                                        \"description\": \"Azure Virtual Machine Managed Identity (it can only be used when NiFi is running on Azure)\",\n+                                        \"displayName\": \"Managed Identity\",\n+                                        \"value\": \"managed-identity\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"default-credential\",\n+                                \"description\": \"\",\n+                                \"displayName\": \"Credential Configuration Strategy\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credential-configuration-strategy\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaNorte\",\n-                                        \"value\": \"Mexico/BajaNorte\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"managed-identity\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credential Configuration Strategy\",\n+                                        \"propertyName\": \"credential-configuration-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.AzureCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Mexico/BajaSur\",\n-                                        \"value\": \"Mexico/BajaSur\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Mexico/General\",\n-                                        \"value\": \"Mexico/General\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ\",\n-                                        \"value\": \"NZ\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NZ-CHAT\",\n-                                        \"value\": \"NZ-CHAT\"\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Navajo\",\n-                                        \"value\": \"Navajo\"\n-                                    },\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"Application Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PRC\",\n-                                        \"value\": \"PRC\"\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\": \"\",\n-                                        \"displayName\": \"PST8PDT\",\n-                                        \"value\": \"PST8PDT\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Apia\",\n-                                        \"value\": \"Pacific/Apia\"\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Auckland\",\n-                                        \"value\": \"Pacific/Auckland\"\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.KustoIngestService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"Application Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Bougainville\",\n-                                        \"value\": \"Pacific/Bougainville\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Chatham\",\n-                                        \"value\": \"Pacific/Chatham\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Chuuk\",\n-                                        \"value\": \"Pacific/Chuuk\"\n+                                        \"description\": \"Azure Application Registration with Application Key\",\n+                                        \"displayName\": \"Application Credentials\",\n+                                        \"value\": \"APPLICATION_CREDENTIALS\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Easter\",\n-                                        \"value\": \"Pacific/Easter\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Authentication Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Efate\",\n-                                        \"value\": \"Pacific/Efate\"\n+                                        \"description\": \"Azure Event Hub shared access key\",\n+                                        \"displayName\": \"Shared Access Key\",\n+                                        \"value\": \"SHARED_ACCESS_KEY\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Enderbury\",\n-                                        \"value\": \"Pacific/Enderbury\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Fakaofo\",\n-                                        \"value\": \"Pacific/Fakaofo\"\n+                                        \"description\": \"Default Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Fiji\",\n-                                        \"value\": \"Pacific/Fiji\"\n+                                        \"description\": \"China Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Funafuti\",\n-                                        \"value\": \"Pacific/Funafuti\"\n+                                        \"description\": \"Germany Service Bus Endpoint\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Galapagos\",\n-                                        \"value\": \"Pacific/Galapagos\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Gambier\",\n-                                        \"value\": \"Pacific/Gambier\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Guadalcanal\",\n-                                        \"value\": \"Pacific/Guadalcanal\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Guam\",\n-                                        \"value\": \"Pacific/Guam\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Honolulu\",\n-                                        \"value\": \"Pacific/Honolulu\"\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-M4\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Johnston\",\n-                                        \"value\": \"Pacific/Johnston\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Kanton\",\n-                                        \"value\": \"Pacific/Kanton\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Kiritimati\",\n-                                        \"value\": \"Pacific/Kiritimati\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Kosrae\",\n-                                        \"value\": \"Pacific/Kosrae\"\n-                                    },\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credentials-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Kwajalein\",\n-                                        \"value\": \"Pacific/Kwajalein\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Majuro\",\n-                                        \"value\": \"Pacific/Majuro\"\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: HTTP, 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+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Marquesas\",\n-                                        \"value\": \"Pacific/Marquesas\"\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\": \"Pacific/Midway\",\n-                                        \"value\": \"Pacific/Midway\"\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+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Nauru\",\n-                                        \"value\": \"Pacific/Nauru\"\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+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Niue\",\n-                                        \"value\": \"Pacific/Niue\"\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. 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\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Norfolk\",\n-                                        \"value\": \"Pacific/Norfolk\"\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+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.ADLSCredentialsService\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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+                            \"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\": \"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-M4\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"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-M4\"\n+                                }\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+                                \"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+                                \"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+                                \"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\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                \"version\": \"2.0.0-M4\"\n+                            }\n+                        ],\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\"\n+                        ],\n+                        \"supportsDynamicProperties\": 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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'azure.storage.credentials.name' attribute contains the name of the dynamic property, then the AzureStorageCredentialsService_v12 (registered in the value) will be selected.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"The name to register AzureStorageCredentialsService_v12\",\n+                                \"value\": \"The AzureStorageCredentialsService_v12\"\n+                            }\n+                        ],\n+                        \"group\": \"org.apache.nifi\",\n+                        \"providedApiImplementations\": [\n+                            {\n+                                \"artifact\": \"nifi-azure-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.services.azure.storage.AzureStorageCredentialsService_v12\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"credentials-type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Noumea\",\n-                                        \"value\": \"Pacific/Noumea\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Pago_Pago\",\n-                                        \"value\": \"Pacific/Pago_Pago\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Palau\",\n-                                        \"value\": \"Pacific/Palau\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Pitcairn\",\n-                                        \"value\": \"Pacific/Pitcairn\"\n-                                    },\n+                                        \"description\": \"Azure Active Directory Service Principal with Client Id / Client Secret of a registered application\",\n+                                        \"displayName\": \"Service Principal\",\n+                                        \"value\": \"SERVICE_PRINCIPAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SAS_TOKEN\",\n+                                \"description\": \"Credentials type to be used for authenticating to Azure\",\n+                                \"displayName\": \"Credentials Type\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"credentials-type\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"managed-identity-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Pohnpei\",\n-                                        \"value\": \"Pacific/Pohnpei\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"MANAGED_IDENTITY\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Credentials Type\",\n+                                        \"propertyName\": \"credentials-type\"\n+                                    }\n+                                ],\n+                                \"description\": \"Client ID of the managed identity. The property is required when User Assigned Managed Identity is used for authentication. It must be empty in case of System Assigned Managed Identity.\",\n+                                \"displayName\": \"Managed Identity Client ID\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"managed-identity-client-id\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Ponape\",\n-                                        \"value\": \"Pacific/Ponape\"\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: HTTP, 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+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"service-principal-client-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Port_Moresby\",\n-                                        \"value\": \"Pacific/Port_Moresby\"\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\": \"Pacific/Rarotonga\",\n-                                        \"value\": \"Pacific/Rarotonga\"\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+                            \"service-principal-tenant-id\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Saipan\",\n-                                        \"value\": \"Pacific/Saipan\"\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+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Samoa\",\n-                                        \"value\": \"Pacific/Samoa\"\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+                            \"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+                            \"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-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tahiti\",\n-                                        \"value\": \"Pacific/Tahiti\"\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+                                \"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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"azure-credentials-service\": {\n+                                \"description\": \"Controller service used to obtain Azure credentials to be used with Key Vault client.\",\n+                                \"displayName\": \"Azure Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-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.AzureCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"group-name-pattern\": {\n+                                \"defaultValue\": \".*\",\n+                                \"description\": \"A Regular Expression matching on the 'group-name' tag value that identifies Secrets whose parameters should be fetched. Any secrets without a 'group-name' tag value that matches this Regex will not be fetched.\",\n+                                \"displayName\": \"Group Name Pattern\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"group-name-pattern\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"key-vault-uri\": {\n+                                \"description\": \"Vault URI of the Key Vault that contains the secrets\",\n+                                \"displayName\": \"Key Vault URI\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"key-vault-uri\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"supportsDynamicProperties\": false,\n+                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"tags\": [\n+                            \"azure\",\n+                            \"key\",\n+                            \"keyvault\",\n+                            \"secrets\",\n+                            \"vault\"\n+                        ],\n+                        \"type\": \"org.apache.nifi.parameter.azure.AzureKeyVaultSecretsParameterProvider\",\n+                        \"typeDescription\": \"Fetches parameters from Azure Key Vault Secrets.  Each secret becomes a Parameter, which map to a Parameter Group byadding a secret tag named 'group-name'.\",\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Tarawa\",\n-                                        \"value\": \"Pacific/Tarawa\"\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\": \"\",\n-                                        \"displayName\": \"Pacific/Tongatapu\",\n-                                        \"value\": \"Pacific/Tongatapu\"\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\": \"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-azure-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.services.azure.cosmos.AzureCosmosDBConnectionService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"azure-cosmos-db-consistency-level\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Truk\",\n-                                        \"value\": \"Pacific/Truk\"\n+                                        \"displayName\": \"STRONG\",\n+                                        \"value\": \"STRONG\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wake\",\n-                                        \"value\": \"Pacific/Wake\"\n+                                        \"displayName\": \"BOUNDED_STALENESS\",\n+                                        \"value\": \"BOUNDED_STALENESS\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Wallis\",\n-                                        \"value\": \"Pacific/Wallis\"\n+                                        \"displayName\": \"SESSION\",\n+                                        \"value\": \"SESSION\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Pacific/Yap\",\n-                                        \"value\": \"Pacific/Yap\"\n+                                        \"displayName\": \"CONSISTENT_PREFIX\",\n+                                        \"value\": \"CONSISTENT_PREFIX\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Poland\",\n-                                        \"value\": \"Poland\"\n-                                    },\n+                                        \"displayName\": \"EVENTUAL\",\n+                                        \"value\": \"EVENTUAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"SESSION\",\n+                                \"description\": \"Choose from five consistency levels on the consistency spectrum. Refer to Cosmos DB documentation for their differences\",\n+                                \"displayName\": \"Cosmos DB Consistency Level\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-consistency-level\",\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-container-id\",\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-name\": {\n+                                \"description\": \"The database name or id. This is used as the namespace for document collections or containers\",\n+                                \"displayName\": \"Cosmos DB Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"azure-cosmos-db-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"azure-cosmos-db-partition-key\": {\n+                                \"description\": \"The partition key used to distribute data among servers\",\n+                                \"displayName\": \"Cosmos DB Partition Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\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+                            \"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-M4\"\n+                                }\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"All FlowFiles that cannot be written to Cosmos DB are routed to this relationship\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"All FlowFiles that are written to Cosmos DB 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+                        \"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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"\",\n-                                        \"displayName\": \"Portugal\",\n-                                        \"value\": \"Portugal\"\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\": \"\",\n-                                        \"displayName\": \"ROK\",\n-                                        \"value\": \"ROK\"\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\": \"\",\n-                                        \"displayName\": \"Singapore\",\n-                                        \"value\": \"Singapore\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/AST4\",\n-                                        \"value\": \"SystemV/AST4\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/AST4ADT\",\n-                                        \"value\": \"SystemV/AST4ADT\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/CST6\",\n-                                        \"value\": \"SystemV/CST6\"\n+                                        \"description\": \"An ORC file.\",\n+                                        \"displayName\": \"orc\",\n+                                        \"value\": \"orc\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/CST6CDT\",\n-                                        \"value\": \"SystemV/CST6CDT\"\n+                                        \"description\": \"A parquet file.\",\n+                                        \"displayName\": \"parquet\",\n+                                        \"value\": \"parquet\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5\",\n-                                        \"value\": \"SystemV/EST5\"\n+                                        \"description\": \"A text file with values separated by vertical bars (|).\",\n+                                        \"displayName\": \"psv\",\n+                                        \"value\": \"psv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/EST5EDT\",\n-                                        \"value\": \"SystemV/EST5EDT\"\n+                                        \"description\": \"A text file with values separated by semicolons (;).\",\n+                                        \"displayName\": \"scsv\",\n+                                        \"value\": \"scsv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/HST10\",\n-                                        \"value\": \"SystemV/HST10\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/MST7\",\n-                                        \"value\": \"SystemV/MST7\"\n+                                        \"description\": \"A text file with tab delimited values (\\\\t).\",\n+                                        \"displayName\": \"tsv\",\n+                                        \"value\": \"tsv\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SystemV/MST7MDT\",\n-                                        \"value\": \"SystemV/MST7MDT\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/PST8\",\n-                                        \"value\": \"SystemV/PST8\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/PST8PDT\",\n-                                        \"value\": \"SystemV/PST8PDT\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/YST9\",\n-                                        \"value\": \"SystemV/YST9\"\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\": \"\",\n-                                        \"displayName\": \"SystemV/YST9YDT\",\n-                                        \"value\": \"SystemV/YST9YDT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"Turkey\",\n-                                        \"value\": \"Turkey\"\n-                                    },\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-M4\"\n+                                }\n+                            },\n+                            \"Partially Succeeded Routing Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"UCT\",\n-                                        \"value\": \"UCT\"\n+                                        \"displayName\": \"success\",\n+                                        \"value\": \"success\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Alaska\",\n-                                        \"value\": \"US/Alaska\"\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\": \"US/Aleutian\",\n-                                        \"value\": \"US/Aleutian\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Arizona\",\n-                                        \"value\": \"US/Arizona\"\n-                                    },\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Poll for Ingest Status\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Streaming Enabled\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/Central\",\n-                                        \"value\": \"US/Central\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"US/East-Indiana\",\n-                                        \"value\": \"US/East-Indiana\"\n-                                    },\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Streaming Enabled\",\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+                                \"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+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Ingest processing failed\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Ingest processing succeeded\",\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+                        ],\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-M4\"\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 original input associated with a failed Query\",\n+                                \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"FlowFiles containing results 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+                            \"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-M4\",\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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"\",\n-                                        \"displayName\": \"US/Eastern\",\n-                                        \"value\": \"US/Eastern\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Hawaii\",\n-                                        \"value\": \"US/Hawaii\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Indiana-Starke\",\n-                                        \"value\": \"US/Indiana-Starke\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Michigan\",\n-                                        \"value\": \"US/Michigan\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Mountain\",\n-                                        \"value\": \"US/Mountain\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Pacific\",\n-                                        \"value\": \"US/Pacific\"\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+                            \"checkpoint-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"US/Samoa\",\n-                                        \"value\": \"US/Samoa\"\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\": \"UTC\",\n-                                        \"value\": \"UTC\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"checkpoint-strategy\",\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+                                \"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\": \"\",\n-                                        \"displayName\": \"Universal\",\n-                                        \"value\": \"Universal\"\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\": \"\",\n-                                        \"displayName\": \"W-SU\",\n-                                        \"value\": \"W-SU\"\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+                                    }\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"event-hub-initial-offset\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"event-hub-message-receive-timeout\": {\n+                                \"defaultValue\": \"1 min\",\n+                                \"description\": \"The amount of time this consumer should wait to receive the Batch Size before returning.\",\n+                                \"displayName\": \"Message Receive Timeout\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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+                            \"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\": \"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+                            \"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\": \"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+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"WET\",\n-                                        \"value\": \"WET\"\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-M4\"\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-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"description\": \"The Record Writer to use for serializing Records to an output FlowFile. The event hub name can be referred by Expression Language '${eventhub.name}' to access a schema. If not specified, each message will create a FlowFile.\",\n+                                \"displayName\": \"Record Writer\",\n+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"storage-account-key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"Zulu\",\n-                                        \"value\": \"Zulu\"\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\": \"\",\n-                                        \"displayName\": \"EST\",\n-                                        \"value\": \"EST\"\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+                                \"dynamic\": false,\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+                            \"storage-container-name\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"HST\",\n-                                        \"value\": \"HST\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"Name of the Azure Storage container to store the event hub consumer group state. If not specified, event hub name is used.\",\n+                                \"displayName\": \"Storage Container Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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+                            \"storage-sas-token\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MST\",\n-                                        \"value\": \"MST\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"AZURE_BLOB_STORAGE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Checkpoint Strategy\",\n+                                        \"propertyName\": \"checkpoint-strategy\"\n+                                    }\n+                                ],\n+                                \"description\": \"The Azure Storage SAS token to store Event Hub consumer group state. Always starts with a ? character.\",\n+                                \"displayName\": \"Storage SAS Token\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"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\": \"ACT\",\n-                                        \"value\": \"ACT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"AET\",\n-                                        \"value\": \"AET\"\n-                                    },\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+                                \"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+                                \"CLUSTER\",\n+                                \"LOCAL\"\n+                            ]\n+                        },\n+                        \"supportedRelationships\": [\n+                            {\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+                            \"azure\",\n+                            \"cloud\",\n+                            \"eventhub\",\n+                            \"events\",\n+                            \"microsoft\",\n+                            \"streaming\",\n+                            \"streams\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.eventhub.ConsumeAzureEventHub\",\n+                        \"typeDescription\": \"Receives messages from Microsoft Azure Event Hubs with checkpointing to ensure consistent event processing. Checkpoint tracking avoids consuming a message multiple times and enables reliable resumption of processing in the event of intermittent network failures. Checkpoint tracking requires external storage and provides the preferred approach to consuming messages from Azure Event Hubs. In clustered environment, ConsumeAzureEventHub processor instances form a consumer group and the messages are distributed among the cluster nodes (each message is processed on one cluster node only).\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The time (in milliseconds since epoch, UTC) at which the message was enqueued in the event hub\",\n+                                \"name\": \"eventhub.enqueued.timestamp\"\n+                            },\n+                            {\n+                                \"description\": \"The offset into the partition at which the message was stored\",\n+                                \"name\": \"eventhub.offset\"\n+                            },\n+                            {\n+                                \"description\": \"The sequence number associated with the message\",\n+                                \"name\": \"eventhub.sequence\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the event hub from which the message was pulled\",\n+                                \"name\": \"eventhub.name\"\n+                            },\n+                            {\n+                                \"description\": \"The name of the partition from which the message was pulled\",\n+                                \"name\": \"eventhub.partition\"\n+                            },\n+                            {\n+                                \"description\": \"The application properties of this message. IE: 'application' would be 'eventhub.property.application'\",\n+                                \"name\": \"eventhub.property.*\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                \"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\": \"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\": \"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+                            \"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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AGT\",\n-                                        \"value\": \"AGT\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ART\",\n-                                        \"value\": \"ART\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"AST\",\n-                                        \"value\": \"AST\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BET\",\n-                                        \"value\": \"BET\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"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+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"BST\",\n-                                        \"value\": \"BST\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CAT\",\n-                                        \"value\": \"CAT\"\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+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CNT\",\n-                                        \"value\": \"CNT\"\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-M4\"\n+                                }\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CST\",\n-                                        \"value\": \"CST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CTT\",\n-                                        \"value\": \"CTT\"\n-                                    },\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+                                \"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-M4\",\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+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"Event Hub Name\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Event Hub Namespace\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Service Bus Endpoint\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"EAT\",\n-                                        \"value\": \"EAT\"\n+                                        \"description\": \"Servicebus endpoint for general use\",\n+                                        \"displayName\": \"Azure\",\n+                                        \"value\": \".servicebus.windows.net\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"ECT\",\n-                                        \"value\": \"ECT\"\n+                                        \"description\": \"Servicebus endpoint for China\",\n+                                        \"displayName\": \"Azure China\",\n+                                        \"value\": \".servicebus.chinacloudapi.cn\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IET\",\n-                                        \"value\": \"IET\"\n+                                        \"description\": \"Servicebus endpoint for Germany\",\n+                                        \"displayName\": \"Azure Germany\",\n+                                        \"value\": \".servicebus.cloudapi.de\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"IST\",\n-                                        \"value\": \"IST\"\n-                                    },\n+                                        \"description\": \"Servicebus endpoint for US Government\",\n+                                        \"displayName\": \"Azure US Government\",\n+                                        \"value\": \".servicebus.usgovcloudapi.net\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \".servicebus.windows.net\",\n+                                \"description\": \"To support namespaces not in the default windows.net domain.\",\n+                                \"displayName\": \"Service Bus Endpoint\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Service Bus Endpoint\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Name\": {\n+                                \"description\": \"The name of the shared access policy. This policy must have Send claims.\",\n+                                \"displayName\": \"Shared Access Policy Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Shared Access Policy Primary Key\": {\n+                                \"description\": \"The key of the shared access policy. Either the primary or the secondary key can be used.\",\n+                                \"displayName\": \"Shared Access Policy Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Shared Access Policy Primary Key\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Transport Type\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"JST\",\n-                                        \"value\": \"JST\"\n+                                        \"description\": \"AMQP over TCP on ports 5671 and 5672\",\n+                                        \"displayName\": \"AMQP\",\n+                                        \"value\": \"Amqp\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MIT\",\n-                                        \"value\": \"MIT\"\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+                            \"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\": \"max-batch-size\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"partitioning-key-attribute-name\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"NET\",\n-                                        \"value\": \"NET\"\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-M4\"\n+                                }\n+                            },\n+                            \"use-managed-identity\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"NST\",\n-                                        \"value\": \"NST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"PLT\",\n-                                        \"value\": \"PLT\"\n-                                    },\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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\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+                                \"description\": \"Any FlowFile that is successfully sent to the event hubs will be transferred 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+                        \"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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"Source Blob Name\",\n+                                \"required\": true,\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Source Container Name\",\n+                                \"required\": true,\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-M4\"\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+                            \"conflict-resolution-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PNT\",\n-                                        \"value\": \"PNT\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"PRT\",\n-                                        \"value\": \"PRT\"\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\": \"\",\n-                                        \"displayName\": \"PST\",\n-                                        \"value\": \"PST\"\n-                                    },\n+                                        \"description\": \"Replace blob contents if the blob already exist\",\n+                                        \"displayName\": \"replace\",\n+                                        \"value\": \"REPLACE_RESOLUTION\"\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+                                \"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 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+                            \"create-container\": {\n+                                \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SST\",\n-                                        \"value\": \"SST\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"VST\",\n-                                        \"value\": \"VST\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UTC\",\n-                                \"description\": \"The Time Zone to use for formatting dates when performing a search. Only used with Managed time strategies.\",\n-                                \"displayName\": \"Time Zone\",\n+                                \"defaultValue\": \"false\",\n+                                \"description\": \"Specifies whether 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\": \"Time Zone\",\n+                                \"name\": \"create-container\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"The token to pass to Splunk.\",\n-                                \"displayName\": \"Token\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Token\",\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-M4\"\n+                                }\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\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\": \"Username\",\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-M4\"\n+                                }\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureBlobStorage_v12\"\n+                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"If using one of the managed Time Range Strategies, this processor will store the values of the latest and earliest times from the previous execution so that the next execution of the can pick up where the last execution left off. The state will be cleared and start over if the query is changed.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"Results retrieved from Splunk are sent out this relationship.\",\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\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-                            \"get\",\n-                            \"logs\",\n-                            \"splunk\"\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.splunk.GetSplunk\",\n-                        \"typeDescription\": \"Retrieves data from Splunk Enterprise.\",\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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The query that performed to produce the FlowFile.\",\n-                                \"name\": \"splunk.query\"\n+                                \"description\": \"The name of the Azure Blob Storage container\",\n+                                \"name\": \"azure.container\"\n                             },\n                             {\n-                                \"description\": \"The value of the earliest time that was used when performing the query.\",\n-                                \"name\": \"splunk.earliest.time\"\n+                                \"description\": \"The name of the blob on Azure Blob Storage\",\n+                                \"name\": \"azure.blobname\"\n                             },\n                             {\n-                                \"description\": \"The value of the latest time that was used when performing the query.\",\n-                                \"name\": \"splunk.latest.time\"\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+                                \"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-splunk-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97506,165 +95784,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-                            \"Character Set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"Specifies the character set of the data being sent.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\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\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"Destination hostname or IP address\",\n-                                \"displayName\": \"Hostname\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\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+                            \"delete-snapshots-option\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Delete the blob only.\",\n+                                        \"displayName\": \"None\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete the blob and its snapshots.\",\n+                                        \"displayName\": \"Include Snapshots\",\n+                                        \"value\": \"INCLUDE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Delete only the blob's snapshots.\",\n+                                        \"displayName\": \"Delete Snapshots Only\",\n+                                        \"value\": \"ONLY\"\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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Idle Connection Expiration\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"delete-snapshots-option\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Max Size of Socket Send Buffer\",\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-M4\"\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-M4\"\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\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\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+                            \"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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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-M4\"\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-                            \"Message Delimiter\": {\n-                                \"description\": \"Specifies the delimiter to use for splitting apart multiple messages within a single FlowFile. If not specified, the entire content of the FlowFile will be used as a single message. If specified, the contents of the FlowFile will be split on this delimiter and each section sent as a separate message. Note that if messages are delimited and some messages for a given FlowFile are transferred successfully while others are not, the messages will be split into individual FlowFiles, such that those messages that were successfully sent are routed to the 'success' relationship while other messages are sent to the 'failure' relationship.\",\n-                                \"displayName\": \"Message Delimiter\",\n+                            \"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\": \"Message Delimiter\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"description\": \"Destination port number\",\n-                                \"displayName\": \"Port\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"filesystem-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Protocol\": {\n+                            \"filesystem-object-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TCP\",\n-                                        \"value\": \"TCP\"\n+                                        \"description\": \"The object to be deleted is a file.\",\n+                                        \"displayName\": \"File\",\n+                                        \"value\": \"file\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"UDP\",\n-                                        \"value\": \"UDP\"\n+                                        \"description\": \"The object to be deleted is a directory.\",\n+                                        \"displayName\": \"Directory\",\n+                                        \"value\": \"directory\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"TCP\",\n-                                \"description\": \"The protocol for communication.\",\n-                                \"displayName\": \"Protocol\",\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protocol\",\n+                                \"name\": \"filesystem-object-type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"SSL Context Service\": {\n-                                \"description\": \"Specifies the SSL Context Service to enable TLS socket communication\",\n-                                \"displayName\": \"SSL Context Service\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"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-M4\"\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\": \"Timeout\",\n-                                \"required\": false,\n-                                \"sensitive\": false\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\": \"FlowFiles that are sent successfully to the destination are sent out this relationship.\",\n-                                \"name\": \"success\"\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-                                \"description\": \"FlowFiles that failed to send to the destination are sent out this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"logs\",\n-                            \"splunk\",\n-                            \"tcp\",\n-                            \"udp\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.splunk.PutSplunk\",\n-                        \"typeDescription\": \"Sends logs to Splunk Enterprise over TCP, TCP + TLS/SSL, or UDP. If a Message Delimiter is provided, then this processor will read messages from the incoming FlowFile based on the delimiter, and send each message to Splunk. If a Message Delimiter is not provided then the content of the FlowFile will be sent directly to Splunk as if it were a single message.\",\n+                        \"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                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97674,267 +96086,455 @@\n                             \"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 \\\"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-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\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-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\n+                            \"Client-Side Encryption Key Type\": {\n+                                \"allowableValues\": [\n+                                    {\n+                                        \"description\": \"Client-Side Encryption disabled\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\n+                                    },\n+                                    {\n+                                        \"description\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n+                                    }\n+                                ],\n+                                \"defaultValue\": \"NONE\",\n+                                \"description\": \"Specifies the key type to use for client-side encryption.\",\n+                                \"displayName\": \"Client-Side Encryption Key Type\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Owner\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\n-                                \"required\": false,\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"blob-name\": {\n+                                \"defaultValue\": \"${azure.blobname}\",\n+                                \"description\": \"The full name of the blob\",\n+                                \"displayName\": \"Blob Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Port\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"blob-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Scheme\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"container-name\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Security Protocol\",\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-M4\"\n+                                }\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Token\",\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\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\": \"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\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"character-set\": {\n-                                \"defaultValue\": \"UTF-8\",\n-                                \"description\": \"The name of the character set.\",\n-                                \"displayName\": \"Character Set\",\n+                            \"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-M4\"\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\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\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+                            \"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.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-M4\",\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-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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+                                    {\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+                            \"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-M4\"\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\": \"character-set\",\n+                                \"name\": \"directory-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"content-type\": {\n-                                \"description\": \"The media type of the event sent to Splunk. If not set, \\\"mime.type\\\" flow file attribute will be used. In case of neither of them is specified, this information will not be sent to the server.\",\n-                                \"displayName\": \"Content Type\",\n+                            \"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\": \"content-type\",\n-                                \"required\": false,\n+                                \"name\": \"file-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"host\": {\n-                                \"description\": \"Specify with the host query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Host\",\n+                            \"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\": \"host\",\n-                                \"required\": false,\n+                                \"name\": \"filesystem-name\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"index\": {\n-                                \"description\": \"Index name. Specify with the index query string parameter. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Index\",\n+                            \"number-of-retries\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The number of automatic retries to perform if the download fails.\",\n+                                \"displayName\": \"Number of Retries\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"index\",\n+                                \"name\": \"number-of-retries\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"request-channel\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"proxy-configuration-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"source\": {\n-                                \"description\": \"User-defined event source. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source\",\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\": \"source\",\n+                                \"name\": \"range-length\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"source-type\": {\n-                                \"description\": \"User-defined event sourcetype. Sets a default for all events when unspecified.\",\n-                                \"displayName\": \"Source Type\",\n+                            \"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\": \"source-type\",\n+                                \"name\": \"range-start\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"Uses as value for HTTP Content-Type header if set.\",\n-                                \"name\": \"mime.type\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.QuerySplunkIndexingStatus\"\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 that are sent successfully to the destination are sent to this relationship.\",\n-                                \"name\": \"success\"\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-                                \"description\": \"FlowFiles that failed to send to the destination are sent to this relationship.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n-                        \"systemResourceConsiderations\": [\n-                            {\n-                                \"description\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\n+                            \"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.splunk.PutSplunkHTTP\",\n-                        \"typeDescription\": \"Sends flow file content to the specified Splunk server over HTTP or HTTPS. Supports HEC Index Acknowledgement.\",\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                        \"typeDescription\": \"Fetch the specified file from Azure Data Lake Storage\",\n                         \"useCases\": [],\n                         \"version\": \"2.0.0-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n+                                \"description\": \"The HTTP error code (if available) from the failed operation\",\n+                                \"name\": \"azure.datalake.storage.statusCode\"\n                             },\n                             {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\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\": true,\n-                        \"artifact\": \"nifi-splunk-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -97943,523 +96543,1653 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"1 min\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Hostname\": {\n-                                \"defaultValue\": \"localhost\",\n-                                \"description\": \"The ip address or hostname of the Splunk server.\",\n-                                \"displayName\": \"Hostname\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Age\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Owner\": {\n-                                \"description\": \"The owner to pass to Splunk.\",\n-                                \"displayName\": \"Owner\",\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\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Owner\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Maximum File Size\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Password\": {\n-                                \"description\": \"The password to authenticate to Splunk.\",\n-                                \"displayName\": \"Password\",\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\": \"Password\",\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+                            \"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\": \"blob-name-prefix\",\n                                 \"required\": false,\n-                                \"sensitive\": true\n+                                \"sensitive\": false\n                             },\n-                            \"Port\": {\n-                                \"defaultValue\": \"8088\",\n-                                \"description\": \"The HTTP Event Collector HTTP Port Number.\",\n-                                \"displayName\": \"HTTP Event Collector Port\",\n+                            \"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\": \"Port\",\n+                                \"name\": \"container-name\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Scheme\": {\n+                            \"et-initial-listing-target\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"https\",\n-                                        \"value\": \"https\"\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\": \"http\",\n-                                        \"value\": \"http\"\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\": \"https\",\n-                                \"description\": \"The scheme for connecting to Splunk.\",\n-                                \"displayName\": \"Scheme\",\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\": \"Scheme\",\n-                                \"required\": true,\n+                                \"name\": \"et-initial-listing-target\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Security Protocol\": {\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-M4\"\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\": \"\",\n-                                        \"displayName\": \"TLSv1_2\",\n-                                        \"value\": \"TLSv1_2\"\n+                                        \"description\": \"This strategy tracks the latest timestamp of listed entity to determine new/updated entities. Since it only tracks few timestamps, it can manage listing state efficiently. However, any newly added, or updated entity having timestamp older than the tracked latest timestamp can not be picked by this strategy. For example, such situation can happen in a file system if a file with old timestamp is copied or moved into the target directory without its last modified timestamp being updated. Also may miss files when multiple subdirectories are being written at the same time while listing is running.\",\n+                                        \"displayName\": \"Tracking Timestamps\",\n+                                        \"value\": \"timestamps\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1_1\",\n-                                        \"value\": \"TLSv1_1\"\n+                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n+                                        \"displayName\": \"Tracking Entities\",\n+                                        \"value\": \"entities\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TLSv1\",\n-                                        \"value\": \"TLSv1\"\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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+                                \"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-M4\"\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-M4\"\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-M4\"\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.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\": \"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+                            \"azure\",\n+                            \"blob\",\n+                            \"cloud\",\n+                            \"microsoft\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": true,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.ListAzureBlobStorage_v12\",\n+                        \"typeDescription\": \"Lists blobs in an Azure Blob Storage container. Listing details are attached to an empty FlowFile for use with FetchAzureBlobStorage. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data. The processor uses Azure Blob Storage client library v12.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\",\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-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"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+                                \"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+                            \"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-M4\"\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+                            \"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\": \"\",\n-                                        \"displayName\": \"SSLv3\",\n-                                        \"value\": \"SSLv3\"\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\": \"TLSv1_2\",\n-                                \"description\": \"The security protocol to use for communicating with Splunk.\",\n-                                \"displayName\": \"Security Protocol\",\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\": \"Security Protocol\",\n+                                \"name\": \"et-initial-listing-target\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Token\": {\n-                                \"description\": \"HTTP Event Collector token starting with the string Splunk. For example 'Splunk 1234578-abcd-1234-abcd-1234abcd'\",\n-                                \"displayName\": \"HTTP Event Collector Token\",\n+                            \"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-M4\"\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\": \"Token\",\n+                                \"name\": \"et-time-window\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Username\": {\n-                                \"description\": \"The username to authenticate to Splunk.\",\n-                                \"displayName\": \"Username\",\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\": \"Username\",\n+                                \"name\": \"file-filter\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"max-query-size\": {\n-                                \"defaultValue\": \"10000\",\n-                                \"description\": \"The maximum number of acknowledgement identifiers the outgoing query contains in one batch. It is recommended not to set it too low in order to reduce network communication.\",\n-                                \"displayName\": \"Maximum Query Size\",\n+                            \"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+                                \"allowableValues\": [\n+                                    {\n+                                        \"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\": \"max-query-size\",\n+                                \"name\": \"include-temporary-files\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"request-channel\": {\n-                                \"description\": \"Identifier of the used request channel.\",\n-                                \"displayName\": \"Splunk Request Channel\",\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\": \"request-channel\",\n-                                \"required\": true,\n+                                \"name\": \"path-filter\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"ttl\": {\n-                                \"defaultValue\": \"1 hour\",\n-                                \"description\": \"The maximum time the processor tries to acquire acknowledgement confirmation for an index, from the point of registration. After the given amount of time, the processor considers the index as not acknowledged and transfers the FlowFile to the \\\"unacknowledged\\\" relationship.\",\n-                                \"displayName\": \"Maximum Waiting Time\",\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"ttl\",\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-M4\"\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-M4\"\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-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The indexing acknowledgement id provided by Splunk.\",\n-                                \"name\": \"splunk.acknowledgement.id\"\n-                            },\n-                            {\n-                                \"description\": \"The time of the response of put request for Splunk.\",\n-                                \"name\": \"splunk.responded.at\"\n-                            }\n-                        ],\n                         \"seeAlso\": [\n-                            \"org.apache.nifi.processors.splunk.PutSplunkHTTP\"\n+                            \"org.apache.nifi.processors.azure.storage.DeleteAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.FetchAzureDataLakeStorage\",\n+                            \"org.apache.nifi.processors.azure.storage.PutAzureDataLakeStorage\"\n                         ],\n                         \"sideEffectFree\": false,\n+                        \"stateful\": {\n+                            \"description\": \"After performing a listing of files, the timestamp of the newest file is stored. This allows the Processor to list only files that have been added or modified after this date the next time that the Processor is run. State is stored across the cluster so that this Processor can be run on Primary Node only and if a new Primary Node is selected, the new node can pick up where the previous node left off, without duplicating the data.\",\n+                            \"scopes\": [\n+                                \"CLUSTER\"\n+                            ]\n+                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was successful.\",\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-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"The name of the Azure File System\",\n+                                \"name\": \"azure.filesystem\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful. This can happen when the acknowledgement did not happened within the time period set for Maximum Waiting Time. FlowFiles with acknowledgement id unknown for the Splunk server will be transferred to this relationship after the Maximum Waiting Time is reached.\",\n-                                \"name\": \"unacknowledged\"\n+                                \"description\": \"The full path of the Azure File\",\n+                                \"name\": \"azure.filePath\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement state is not determined. FlowFiles transferred to this relationship might be penalized. This happens when Splunk returns with HTTP 200 but with false response for the acknowledgement id in the flow file attribute.\",\n-                                \"name\": \"undetermined\"\n+                                \"description\": \"The name of the Azure Directory\",\n+                                \"name\": \"azure.directory\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile is transferred to this relationship when the acknowledgement was not successful due to errors during the communication. FlowFiles are timing out or unknown by the Splunk server will transferred to \\\"undetermined\\\" relationship.\",\n+                                \"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\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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\": \"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-M4\"\n+                                }\n+                            },\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\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"conflict-resolution-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+                                \"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+                                \"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 where the files will be moved.\",\n+                                \"displayName\": \"Destination Filesystem\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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+                                \"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-M4\"\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+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"source-directory-name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"source-filesystem-name\": {\n+                                \"defaultValue\": \"${azure.filesystem}\",\n+                                \"description\": \"Name of the Azure Storage File System from where the move should happen.\",\n+                                \"displayName\": \"Source Filesystem\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"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 could not be written to Azure storage for some reason are transferred to this relationship\",\n                                 \"name\": \"failure\"\n+                            },\n+                            {\n+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"acknowledgement\",\n-                            \"http\",\n-                            \"logs\",\n-                            \"splunk\"\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.splunk.QuerySplunkIndexingStatus\",\n-                        \"typeDescription\": \"Queries Splunk server in order to acquire the status of indexing acknowledgement.\",\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-M4\"\n-                    }\n-                ],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hashicorp-vault-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [\n+                        \"version\": \"2.0.0-M4\",\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\": true,\n-                        \"artifact\": \"nifi-hashicorp-vault-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"configuration-strategy\": {\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\": \"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\": \"Client-Side Encryption disabled\",\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\": \"Client-Side Encryption enabled using local key\",\n+                                        \"displayName\": \"LOCAL\",\n+                                        \"value\": \"LOCAL\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"direct-properties\",\n-                                \"description\": \"Specifies the source of the configuration properties.\",\n-                                \"displayName\": \"Configuration Strategy\",\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\": \"configuration-strategy\",\n+                                \"name\": \"Client-Side Encryption Key Type\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.authentication\": {\n-                                \"allowableValues\": [\n+                            \"Client-Side Encryption Local Key\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"TOKEN\",\n-                                        \"value\": \"TOKEN\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"LOCAL\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Client-Side Encryption Key Type\",\n+                                        \"propertyName\": \"Client-Side Encryption Key Type\"\n+                                    }\n+                                ],\n+                                \"description\": \"When using local client-side encryption, this is the raw key, encoded in hexadecimal\",\n+                                \"displayName\": \"Client-Side Encryption Local Key\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Client-Side Encryption Local Key\",\n+                                \"required\": true,\n+                                \"sensitive\": true\n+                            },\n+                            \"File Resource Service\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPID\",\n-                                        \"value\": \"APPID\"\n-                                    },\n+                                        \"dependentValues\": [\n+                                            \"FILE_RESOURCE_SERVICE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\n+                                    }\n+                                ],\n+                                \"description\": \"File Resource Service providing access to the local resource to be transferred\",\n+                                \"displayName\": \"File Resource Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"File Resource Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Resource Transfer Source\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"APPROLE\",\n-                                        \"value\": \"APPROLE\"\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\": \"AWS_EC2\",\n-                                        \"value\": \"AWS_EC2\"\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+                                \"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+                                \"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\": \"\",\n-                                        \"displayName\": \"AZURE\",\n-                                        \"value\": \"AZURE\"\n+                                        \"description\": \"Fail if the blob already exists\",\n+                                        \"displayName\": \"fail\",\n+                                        \"value\": \"FAIL_RESOLUTION\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CERT\",\n-                                        \"value\": \"CERT\"\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\": \"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\": \"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+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"create-container\": {\n+                                \"allowableValues\": [\n+                                    {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"CUBBYHOLE\",\n-                                        \"value\": \"CUBBYHOLE\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"KUBERNETES\",\n-                                        \"value\": \"KUBERNETES\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"TOKEN\",\n-                                \"dependencies\": [\n-                                    {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"description\": \"Vault authentication method, as described in the Spring Vault Environment Configuration documentation (https://docs.spring.io/spring-vault/docs/2.3.x/reference/html/#vault.core.environment-vault-configuration).\",\n-                                \"displayName\": \"Vault Authentication\",\n+                                \"defaultValue\": \"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\": \"vault.authentication\",\n+                                \"name\": \"create-container\",\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+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.connection.timeout\",\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-M4\"\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+                                \"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-M4\"\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\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n                             },\n-                            \"vault.properties.files\": {\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+                            \"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-M4\",\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+                                \"description\": \"Error code reported during blob operation\",\n+                                \"name\": \"azure.error.code\"\n+                            },\n+                            {\n+                                \"description\": \"When Conflict Resolution Strategy is 'ignore', this property will be true/false depending on whether the blob was ignored.\",\n+                                \"name\": \"azure.ignored\"\n+                            }\n+                        ]\n+                    },\n+                    {\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                                            \"properties-files\"\n+                                            \"FILE_RESOURCE_SERVICE\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Resource Transfer Source\",\n+                                        \"propertyName\": \"Resource Transfer Source\"\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\": \"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\": \"vault.properties.files\",\n+                                \"name\": \"File Resource Service\",\n                                 \"required\": true,\n-                                \"resourceDefinition\": {\n-                                    \"cardinality\": \"MULTIPLE\",\n-                                    \"resourceTypes\": [\n-                                        \"FILE\"\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.fileresource.service.api.FileResourceService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"vault.read.timeout\": {\n-                                \"defaultValue\": \"15 sec\",\n-                                \"description\": \"The read timeout for the HashiCorp Vault client\",\n-                                \"displayName\": \"Read Timeout\",\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                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.read.timeout\",\n+                                \"name\": \"Resource Transfer Source\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"vault.ssl.context.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\": \"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-M4\"\n+                                }\n+                            },\n+                            \"base-temporary-path\": {\n+                                \"defaultValue\": \"\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"direct-properties\"\n+                                            \"WRITE_AND_RENAME\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"propertyDisplayName\": \"Writing Strategy\",\n+                                        \"propertyName\": \"writing-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\": \"The Path where the temporary directory will be created. The Path name cannot contain a leading '/'. The root directory can be designated by the empty string value. Non-existing directories will be created.The Temporary File Directory name is _nifitempdirectory\",\n+                                \"displayName\": \"Base Temporary Path\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"base-temporary-path\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"vault.ssl.context.service\",\n+                                \"name\": \"conflict-resolution-strategy\",\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+                                \"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+                                \"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+                            },\n+                            \"proxy-configuration-service\": {\n+                                \"description\": \"Specifies the Proxy Configuration Controller Service to proxy network requests. Supported proxies: HTTP, 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+                                \"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-M4\"\n                                 }\n                             },\n-                            \"vault.uri\": {\n-                                \"dependencies\": [\n+                            \"writing-strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"direct-properties\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Configuration Strategy\",\n-                                        \"propertyName\": \"configuration-strategy\"\n+                                        \"description\": \"The processor writes the Azure file into a temporary directory and then renames/moves it to the final destination. This prevents other processes from reading partially written files.\",\n+                                        \"displayName\": \"Write and Rename\",\n+                                        \"value\": \"WRITE_AND_RENAME\"\n+                                    },\n+                                    {\n+                                        \"description\": \"The processor writes the Azure file directly to the destination. This might result in the reading of partially written files.\",\n+                                        \"displayName\": \"Simple Write\",\n+                                        \"value\": \"SIMPLE_WRITE\"\n                                     }\n                                 ],\n-                                \"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+                                \"defaultValue\": \"WRITE_AND_RENAME\",\n+                                \"description\": \"Defines the approach for writing the Azure file.\",\n+                                \"displayName\": \"Writing Strategy\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"vault.uri\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"writing-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"providedApiImplementations\": [\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-                                \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultClientService\",\n-                                \"version\": \"2.0.0-M4\"\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+                                \"description\": \"Files that have been successfully written to Azure storage are transferred to this relationship\",\n+                                \"name\": \"success\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": true,\n-                        \"supportsSensitiveDynamicProperties\": 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-                            \"hashicorp\",\n-                            \"vault\"\n+                            \"adlsgen2\",\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"datalake\",\n+                            \"microsoft\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.StandardHashiCorpVaultClientService\",\n-                        \"typeDescription\": \"A controller service for interacting with HashiCorp Vault.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [\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-M4\",\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-hashicorp-vault-nar\",\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"kv-path\": {\n-                                \"defaultValue\": \"kv\",\n-                                \"description\": \"The HashiCorp Vault path to the Key/Value Version 1 Secrets Engine\",\n-                                \"displayName\": \"Key/Value Path\",\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 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\": \"kv-path\",\n+                                \"name\": \"Auto Delete Messages\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"secret-name-pattern\": {\n-                                \"defaultValue\": \".*\",\n-                                \"description\": \"A Regular Expression indicating which Secrets to include as parameter groups to map to Parameter Contexts by name.\",\n-                                \"displayName\": \"Secret Name Pattern\",\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\": \"secret-name-pattern\",\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-M4\"\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-                            \"vault-client-service\": {\n-                                \"description\": \"The service used to interact with HashiCorp Vault\",\n-                                \"displayName\": \"HashiCorp Vault Client Service\",\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\": \"vault-client-service\",\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: HTTP, 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+                                \"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-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.proxy.ProxyConfigurationService\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n                             }\n                         },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.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-                            \"hashicorp\",\n-                            \"secret\",\n-                            \"vault\"\n+                            \"azure\",\n+                            \"cloud\",\n+                            \"dequeue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n                         ],\n-                        \"type\": \"org.apache.nifi.vault.hashicorp.HashiCorpVaultParameterProvider\",\n-                        \"typeDescription\": \"Provides parameters from HashiCorp Vault Key/Value Version 1 Secrets.  Each Secret represents a parameter group, which will map to a Parameter Context.  The keys and values in the Secret map to Parameters.\",\n-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-windows-event-log-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\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-M4\",\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\": true,\n-                        \"artifact\": \"nifi-windows-event-log-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -98468,1131 +98198,1347 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"channel\": {\n-                                \"defaultValue\": \"System\",\n-                                \"description\": \"The Windows Event Log Channel to listen to.\",\n-                                \"displayName\": \"Channel\",\n+                            \"Credentials Service\": {\n+                                \"description\": \"Controller Service used to obtain Azure Storage Credentials.\",\n+                                \"displayName\": \"Credentials Service\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"channel\",\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-M4\"\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-                            \"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+                            \"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: HTTP, 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+                                \"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-M4\"\n+                                }\n+                            },\n+                            \"storage-endpoint-suffix\": {\n+                                \"defaultValue\": \"queue.core.windows.net\",\n+                                \"description\": \"Storage accounts in public Azure always use a common FQDN suffix. Override this endpoint suffix with a different suffix in certain circumstances (like Azure Stack or non-public Azure regions).\",\n+                                \"displayName\": \"Endpoint Suffix\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"storage-endpoint-suffix\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            }\n+                        },\n+                        \"seeAlso\": [\n+                            \"org.apache.nifi.processors.azure.storage.queue.GetAzureQueueStorage_v12\"\n+                        ],\n+                        \"sideEffectFree\": false,\n+                        \"supportedRelationships\": [\n+                            {\n+                                \"description\": \"Unsuccessful operations will be transferred to the failure relationship.\",\n+                                \"name\": \"failure\"\n+                            },\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+                            \"enqueue\",\n+                            \"microsoft\",\n+                            \"queue\",\n+                            \"storage\"\n+                        ],\n+                        \"triggerSerially\": false,\n+                        \"triggerWhenAnyDestinationAvailable\": false,\n+                        \"triggerWhenEmpty\": false,\n+                        \"type\": \"org.apache.nifi.processors.azure.storage.queue.PutAzureQueueStorage_v12\",\n+                        \"typeDescription\": \"Writes the content of the incoming FlowFiles to the configured Azure Queue Storage.\",\n+                        \"useCases\": [],\n+                        \"version\": \"2.0.0-M4\"\n+                    }\n+                ],\n+                \"reportingTasks\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": \"* * * * * ?\",\n+                            \"TIMER_DRIVEN\": \"0 sec\"\n+                        },\n+                        \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n+                        \"group\": \"org.apache.nifi\",\n+                        \"propertyDescriptors\": {\n+                            \"Application ID\": {\n+                                \"defaultValue\": \"nifi\",\n+                                \"description\": \"The Application ID to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Application ID\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"inactiveDurationToReconnect\",\n+                                \"name\": \"Application ID\",\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+                            \"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\": \"maxBuffer\",\n+                                \"name\": \"Batch Size\",\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+                            \"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\": \"maxQueue\",\n+                                \"name\": \"include-null-values\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"query\": {\n-                                \"defaultValue\": \"*\",\n-                                \"description\": \"XPath Query to filter events. (See https://msdn.microsoft.com/en-us/library/windows/desktop/dd996910(v=vs.85).aspx for examples.)\",\n-                                \"displayName\": \"XPath Query\",\n+                            \"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\": \"query\",\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-                        \"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+                            \"azure\",\n+                            \"log analytics\",\n+                            \"provenace\",\n+                            \"reporting\"\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-M4\",\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-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-geohash-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\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-M4\"\n+                    },\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-geohash-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-azure-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\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                         \"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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"geohash-format\",\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-                            \"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+                            \"Instance ID\": {\n+                                \"defaultValue\": \"${hostname(true)}\",\n+                                \"description\": \"Id of this NiFi instance to be included in the metrics sent to Azure Log Analytics WS\",\n+                                \"displayName\": \"Instance ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-level\",\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-                            \"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+                            \"Job Name\": {\n+                                \"defaultValue\": \"nifi_reporting_job\",\n+                                \"description\": \"The name of the exporting job\",\n+                                \"displayName\": \"Job Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"geohash-record-path\",\n-                                \"required\": true,\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-                            \"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+                            \"Log Analytics Custom Log Name\": {\n+                                \"defaultValue\": \"nifimetrics\",\n+                                \"description\": \"Log Analytics Custom Log Name\",\n+                                \"displayName\": \"Log Analytics Custom Log Name\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"latitude-record-path\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"longitude-record-path\",\n-                                \"required\": true,\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-                            \"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+                            \"Log Analytics Workspace Id\": {\n+                                \"description\": \"Log Analytics Workspace Id\",\n+                                \"displayName\": \"Log Analytics Workspace Id\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"mode\",\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\": false\n+                                \"sensitive\": true\n                             },\n-                            \"record-reader\": {\n-                                \"description\": \"Specifies the record reader service to use for reading incoming data\",\n-                                \"displayName\": \"Record Reader\",\n+                            \"Log Analytics Workspace Key\": {\n+                                \"description\": \"Azure Log Analytic Worskspace Key\",\n+                                \"displayName\": \"Log Analytics Workspace Key\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"record-reader\",\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\": 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-M4\"\n-                                }\n+                                \"sensitive\": true\n                             },\n-                            \"record-writer\": {\n-                                \"description\": \"Specifies the record writer service to use for writing data\",\n-                                \"displayName\": \"Record Writer\",\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\": \"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-M4\"\n-                                }\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-                            \"routing-strategy\": {\n+                            \"Send JVM Metrics\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"SKIP\",\n-                                        \"value\": \"SKIP\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SPLIT\",\n-                                        \"value\": \"SPLIT\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"REQUIRE\",\n-                                        \"value\": \"REQUIRE\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\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\": \"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\": \"routing-strategy\",\n+                                \"name\": \"Send JVM Metrics\",\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+                            \"azure\",\n+                            \"log analytics\",\n+                            \"metrics\",\n+                            \"reporting\"\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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME type indicated by the record writer\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of records in the resulting flow file\",\n-                                \"name\": \"record.count\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.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-M4\"\n                     }\n-                ],\n-                \"reportingTasks\": []\n+                ]\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-kerberos-user-service-nar\",\n+            \"artifact\": \"nifi-dbcp-service-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"JDBC driver property name and value applied to JDBC connections.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            },\n+                            {\n+                                \"description\": \"JDBC driver property name prefixed with 'SENSITIVE.' handled as a sensitive property.\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"name\": \"SENSITIVE.JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a Keytab and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access keytab\"\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\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+                            \"Database Connection URL\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Keytab\",\n+                                \"name\": \"Database Connection URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database Driver Class Name\": {\n+                                \"description\": \"Database driver class name\",\n+                                \"displayName\": \"Database Driver Class Name\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database Driver Class Name\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Database User\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database User\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Total Connections\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of active connections that can be allocated from this pool at the same time,  or negative for no limit.\",\n+                                \"displayName\": \"Max Total Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Total Connections\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Max Wait Time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or -1 to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Max Wait Time\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Validation-query\": {\n+                                \"description\": \"Validation query used to validate connections before returning them. When connection is invalid, it gets dropped and new valid connection will be returned. Note!! Using validation might have some performance penalty.\",\n+                                \"displayName\": \"Validation query\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Validation-query\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"database-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"database-driver-locations\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\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+                            \"dbcp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-max-conn-lifetime\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-max-idle-conns\": {\n+                                \"defaultValue\": \"8\",\n+                                \"description\": \"The maximum number of connections that can remain idle in the pool without extra ones being released. Set to any negative value to allow unlimited idle connections.\",\n+                                \"displayName\": \"Max Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-max-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"30 mins\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-min-idle-conns\": {\n+                                \"defaultValue\": \"0\",\n+                                \"description\": \"The minimum number of connections that can remain idle in the pool without extra ones being created. Set to or zero to allow no idle connections.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-min-idle-conns\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-soft-min-evictable-idle-time\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle connection evictor, with the extra condition that at least a minimum number of idle connections remain in the pool. When the not-soft version of this option is set to a positive value, it is examined first by the idle connection evictor: when idle connections are visited by the evictor, idle time is first compared against it (without considering the number of idle connections in the pool) and then against this soft option, including the minimum idle connections constraint.\",\n+                                \"displayName\": \"Soft Minimum Evictable Idle Time\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-soft-min-evictable-idle-time\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"dbcp-time-between-eviction-runs\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The time period to sleep between runs of the idle connection evictor thread. When non-positive, no idle connection evictor thread will be run.\",\n+                                \"displayName\": \"Time Between Eviction Runs\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"dbcp-time-between-eviction-runs\",\n+                                \"required\": false,\n+                                \"sensitive\": false\n+                            },\n+                            \"kerberos-credentials-service\": {\n+                                \"description\": \"Specifies the Kerberos Credentials Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos Credentials Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-credentials-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosCredentialsService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"kerberos-password\": {\n+                                \"description\": \"The password to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\n+                                \"displayName\": \"Kerberos Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"kerberos-principal\": {\n+                                \"description\": \"The principal to use when specifying the principal and password directly in the processor for authenticating via Kerberos.\",\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+                                \"name\": \"kerberos-principal\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n+                            },\n+                            \"kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\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-M4\"\n-                            },\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.SelfContainedKerberosUserService\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n+                        \"supportsSensitiveDynamicProperties\": true,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Keytab\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosKeytabUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and keytab that other components are able to use in order to perform authentication using Kerberos. By encapsulating this information into a Controller Service and allowing other components to make use of it (as opposed to specifying the principal and keytab directly in the processor) an administrator is able to choose which users are allowed to use which keytabs and principals. This provides a more robust security model for multi-tenant use cases.\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPool\",\n+                        \"typeDescription\": \"Provides Database Connection Pooling Service. Connections can be asked from pool and returned after usage.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"group\": \"org.apache.nifi\",\n-                        \"propertyDescriptors\": {\n-                            \"Kerberos Password\": {\n-                                \"description\": \"Kerberos password associated with the principal.\",\n-                                \"displayName\": \"Kerberos Password\",\n-                                \"dynamic\": false,\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"If 'database.name' attribute contains the name of the dynamic property, then the DBCPService (registered in the value) will be selected.\",\n                                 \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Kerberos Password\",\n-                                \"required\": true,\n-                                \"sensitive\": true\n-                            },\n-                            \"Kerberos Principal\": {\n-                                \"description\": \"Kerberos principal to authenticate as. Requires nifi.kerberos.krb5.file to be set in your nifi.properties\",\n-                                \"displayName\": \"Kerberos Principal\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"The name to register DBCPService\",\n+                                \"value\": \"The DBCPService\"\n                             }\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.kerberos.KerberosUserService\",\n+                                \"type\": \"org.apache.nifi.dbcp.DBCPService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n-                        \"supportsDynamicProperties\": false,\n+                        \"supportsDynamicProperties\": true,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"Authentication\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Password\",\n-                            \"Principal\",\n-                            \"Security\"\n+                            \"connection\",\n+                            \"database\",\n+                            \"dbcp\",\n+                            \"jdbc\",\n+                            \"pooling\",\n+                            \"store\"\n                         ],\n-                        \"type\": \"org.apache.nifi.kerberos.KerberosPasswordUserService\",\n-                        \"typeDescription\": \"Provides a mechanism for creating a KerberosUser from a principal and password that other components are able to use in order to perform authentication using Kerberos.\",\n+                        \"type\": \"org.apache.nifi.dbcp.DBCPConnectionPoolLookup\",\n+                        \"typeDescription\": \"Provides a DBCPService that can be used to dynamically select another DBCPService. This service requires an attribute named 'database.name' to be passed in when asking for a connection, and will throw an exception if the attribute is missing. The value of 'database.name' will be used to select the DBCPService that has been registered with that name. This will allow multiple DBCPServices to be defined and registered, and then selected dynamically at runtime by tagging flow files with the appropriate 'database.name' attribute.\",\n                         \"version\": \"2.0.0-M4\"\n                     },\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-kerberos-user-service-nar\",\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n+                        \"dynamicProperties\": [\n+                            {\n+                                \"description\": \"Specifies a property name and value to be set on the JDBC connection(s). If Expression Language is used, evaluation will be performed upon the controller service being enabled. Note that no flow file input (attributes, e.g.) is available for use in Expression Language constructs for these properties.\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"name\": \"JDBC property name\",\n+                                \"value\": \"JDBC property value\"\n+                            }\n+                        ],\n                         \"explicitRestrictions\": [\n                             {\n-                                \"explanation\": \"Allows user to define a ticket cache and principal that can then be used by other components.\",\n-                                \"requiredPermission\": \"access ticket cache\"\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\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+                            \"hikaricp-connection-url\": {\n+                                \"description\": \"A database connection URL used to connect to a database. May contain database system name, host, port, database name and some parameters. The exact syntax of a database connection URL is specified by your DBMS.\",\n+                                \"displayName\": \"Database Connection URL\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Principal\",\n+                                \"name\": \"hikaricp-connection-url\",\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+                            \"hikaricp-driver-classname\": {\n+                                \"description\": \"The fully-qualified class name of the JDBC driver. Example: com.mysql.jdbc.Driver\",\n+                                \"displayName\": \"Database Driver Class Name\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"ENVIRONMENT\",\n                                 \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n-                                \"name\": \"Kerberos Ticket Cache File\",\n+                                \"name\": \"hikaricp-driver-classname\",\n                                 \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"hikaricp-driver-locations\": {\n+                                \"description\": \"Comma-separated list of files/folders and/or URLs containing the driver JAR and its dependencies (if any). For example '/var/tmp/mariadb-java-client-1.1.7.jar'\",\n+                                \"displayName\": \"Database Driver Location(s)\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-driver-locations\",\n+                                \"required\": false,\n                                 \"resourceDefinition\": {\n-                                    \"cardinality\": \"SINGLE\",\n+                                    \"cardinality\": \"MULTIPLE\",\n                                     \"resourceTypes\": [\n-                                        \"FILE\"\n+                                        \"FILE\",\n+                                        \"URL\",\n+                                        \"DIRECTORY\"\n                                     ]\n                                 },\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"providedApiImplementations\": [\n-                            {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n-                                \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n-                                \"version\": \"2.0.0-M4\"\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-M4\"\n-                            }\n-                        ],\n-                        \"restricted\": true,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"Authentication\",\n-                            \"Cache\",\n-                            \"Credentials\",\n-                            \"Kerberos\",\n-                            \"Principal\",\n-                            \"Security\",\n-                            \"Ticket\"\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-                        \"version\": \"2.0.0-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-social-media-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-social-media-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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-                        \"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+                            \"hikaricp-kerberos-user-service\": {\n+                                \"description\": \"Specifies the Kerberos User Controller Service that should be used for authenticating with Kerberos\",\n+                                \"displayName\": \"Kerberos User Service\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backfill-minutes\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"hikaricp-kerberos-user-service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.kerberos.KerberosUserService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\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+                            \"hikaricp-max-conn-lifetime\": {\n+                                \"defaultValue\": \"-1\",\n+                                \"description\": \"The maximum lifetime of a connection. After this time is exceeded the connection will fail the next activation, passivation or validation test. A value of zero or less means the connection has an infinite lifetime.\",\n+                                \"displayName\": \"Max Connection Lifetime\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"backoff-attempts\",\n-                                \"required\": true,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-max-conn-lifetime\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"backoff-time\": {\n-                                \"defaultValue\": \"1 mins\",\n-                                \"description\": \"The duration to backoff before requesting a new stream ifthe current one fails for any reason. Will increase by factor of 2 every time a restart fails\",\n-                                \"displayName\": \"Backoff Time\",\n+                            \"hikaricp-max-total-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the maximum size that the pool is allowed to reach, including both idle and in-use connections. Basically this value will determine the maximum number of actual connections to the database backend. A reasonable value for this is best determined by your execution environment. When the pool reaches this size, and no idle connections are available, the service will block for up to connectionTimeout milliseconds before timing out.\",\n+                                \"displayName\": \"Max Total Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"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\": \"hikaricp-max-total-conns\",\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+                            \"hikaricp-max-wait-time\": {\n+                                \"defaultValue\": \"500 millis\",\n+                                \"description\": \"The maximum amount of time that the pool will wait (when there are no available connections)  for a connection to be returned before failing, or 0 <time units> to wait indefinitely. \",\n+                                \"displayName\": \"Max Wait Time\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"base-path\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"hikaricp-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+                            \"hikaricp-min-idle-conns\": {\n+                                \"defaultValue\": \"10\",\n+                                \"description\": \"This property controls the minimum number of idle connections that HikariCP tries to maintain in the pool. If the idle connections dip below this value and total connections in the pool are less than 'Max Total Connections', HikariCP will make a best effort to add additional connections quickly and efficiently. It is recommended that this property to be set equal to 'Max Total Connections'.\",\n+                                \"displayName\": \"Minimum Idle Connections\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"batch-size\",\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-                            \"bearer-token\": {\n-                                \"description\": \"The Bearer Token provided by Twitter.\",\n-                                \"displayName\": \"Bearer Token\",\n+                            \"hikaricp-password\": {\n+                                \"description\": \"The password for the database user\",\n+                                \"displayName\": \"Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"bearer-token\",\n-                                \"required\": true,\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-                            \"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+                            \"hikaricp-username\": {\n+                                \"description\": \"Database user name\",\n+                                \"displayName\": \"Database User\",\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\": \"hikaricp-username\",\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+                            \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"expansions\",\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-dbcp-service-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-                            \"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-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\": \"maximum-backoff-time\",\n+                                \"name\": \"db-record-sink-dcbp-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-M4\"\n+                                }\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-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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"media-fields\",\n-                                \"required\": 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-                            \"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-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\": \"place-fields\",\n+                                \"name\": \"db-record-sink-quoted-identifiers\",\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+                            \"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\": \"poll-fields\",\n+                                \"name\": \"db-record-sink-quoted-table-identifiers\",\n                                 \"required\": false,\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+                            \"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\": \"queue-size\",\n-                                \"required\": true,\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-                            \"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+                            \"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\": \"read-timeout\",\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-                            \"stream-endpoint\": {\n+                            \"db-record-sink-translate-field-names\": {\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\": \"\",\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\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\": \"\",\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"Sample Endpoint\",\n-                                \"description\": \"The source from which the processor will consume Tweets.\",\n-                                \"displayName\": \"Stream Endpoint\",\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\": \"stream-endpoint\",\n-                                \"required\": true,\n+                                \"name\": \"db-record-sink-translate-field-names\",\n+                                \"required\": false,\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+                            \"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\": \"tweet-fields\",\n+                                \"name\": \"db-record-sink-unmatched-column-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"user-fields\": {\n-                                \"description\": \"A comma-separated list of user fields to be returned as part of the tweet. Refer to https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/user for proper usage. Possible field values include: created_at, description, entities, id, location, name, pinned_tweet_id, profile_image_url, protected, public_metrics, url, username, verified, withheld\",\n-                                \"displayName\": \"User Fields\",\n+                            \"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\": \"user-fields\",\n+                                \"name\": \"db-record-sink-unmatched-field-behavior\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n+                        \"providedApiImplementations\": [\n                             {\n-                                \"description\": \"FlowFiles containing an array of one or more Tweets\",\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-M4\"\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+                            \"connection\",\n+                            \"database\",\n+                            \"db\",\n+                            \"jdbc\",\n+                            \"record\"\n                         ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The MIME Type set to application/json\",\n-                                \"name\": \"mime.type\"\n-                            },\n-                            {\n-                                \"description\": \"The number of Tweets in the FlowFile\",\n-                                \"name\": \"tweets\"\n-                            }\n-                        ]\n+                        \"type\": \"org.apache.nifi.record.sink.db.DatabaseRecordSink\",\n+                        \"typeDescription\": \"Provides a service to write records using a configured database connection.\",\n+                        \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-poi-nar\",\n+            \"artifact\": \"nifi-hashicorp-vault-client-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-dropbox-services-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n                         \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"artifact\": \"nifi-dropbox-services-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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-                            \"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+                            \"access-token\": {\n+                                \"description\": \"Access Token of the user's Dropbox app. See Additional Details for more information about Access Token generation.\",\n+                                \"displayName\": \"Access Token\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\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-                            \"Protection Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n-                                    },\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Protection Type\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"Required Sheets\": {\n-                                \"description\": \"Comma-separated list of Excel document sheet names whose rows should be extracted from the excel document. If this property is left blank then all the rows from all the sheets will be extracted from the Excel document. The list of names is case sensitive. Any sheets not specified in this value will be ignored. An exception will be thrown if a specified sheet(s) are not found.\",\n-                                \"displayName\": \"Required Sheets\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"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+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Starting Row\",\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-                            \"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\": \"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+                            \"app-secret\": {\n+                                \"description\": \"App Secret of the user's Dropbox app. See Additional Details for more information.\",\n+                                \"displayName\": \"App Secret\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"schema-access-strategy\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"app-secret\",\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+                                \"sensitive\": true\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+                            \"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\": \"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\": \"refresh-token\",\n                                 \"required\": true,\n-                                \"sensitive\": false,\n-                                \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-standard-services-api-nar\",\n-                                    \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.schemaregistry.services.SchemaReferenceReader\",\n-                                    \"version\": \"2.0.0-M4\"\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-M4\"\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+                                \"sensitive\": true\n                             }\n                         },\n                         \"providedApiImplementations\": [\n                             {\n-                                \"artifact\": \"nifi-standard-services-api-nar\",\n+                                \"artifact\": \"nifi-dropbox-services-api-nar\",\n                                 \"group\": \"org.apache.nifi\",\n-                                \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.dropbox.credentials.service.DropboxCredentialService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"cell\",\n-                            \"excel\",\n-                            \"parse\",\n-                            \"reader\",\n-                            \"record\",\n-                            \"row\",\n-                            \"spreadsheet\",\n-                            \"values\",\n-                            \"xlsx\"\n+                            \"credentials\",\n+                            \"dropbox\",\n+                            \"provider\"\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+                        \"type\": \"org.apache.nifi.services.dropbox.StandardDropboxCredentialService\",\n+                        \"typeDescription\": \"Defines credentials for Dropbox processors.\",\n                         \"version\": \"2.0.0-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-workday-processors-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-poi-nar\",\n+                        \"additionalDetails\": true,\n+                        \"artifact\": \"nifi-workday-processors-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -99601,685 +99547,456 @@\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"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-                            \"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+                            \"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\": \"Password\",\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-M4\"\n+                                }\n+                            },\n+                            \"Workday Password\": {\n+                                \"description\": \"The password provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Password\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Password\",\n                                 \"required\": true,\n                                 \"sensitive\": true\n                             },\n-                            \"Protection Type\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"An Excel spreadsheet not protected by a password\",\n-                                        \"displayName\": \"Unprotected\",\n-                                        \"value\": \"UNPROTECTED\"\n-                                    },\n+                            \"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\": \"Workday Report URL\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Workday Username\": {\n+                                \"description\": \"The username provided for authentication of Workday requests. Encoded using Base64 for HTTP Basic Authentication as described in RFC 7617.\",\n+                                \"displayName\": \"Workday Username\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"FLOWFILE_ATTRIBUTES\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n+                                \"name\": \"Workday Username\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"record-reader\": {\n+                                \"description\": \"Specifies the Controller Service to use for parsing incoming data and determining the data's schema.\",\n+                                \"displayName\": \"Record Reader\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"record-reader\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"record-writer\": {\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"An Excel spreadsheet protected by a password\",\n-                                        \"displayName\": \"Password Protected\",\n-                                        \"value\": \"PASSWORD\"\n+                                        \"propertyDisplayName\": \"Record Reader\",\n+                                        \"propertyName\": \"record-reader\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"UNPROTECTED\",\n-                                \"description\": \"Specifies whether an Excel spreadsheet is protected by a password or not.\",\n-                                \"displayName\": \"Protection Type\",\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\": \"Protection Type\",\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-M4\"\n+                                }\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\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\": \"Response FlowFiles transferred when receiving HTTP responses with a status code between 200 and 299.\",\n+                                \"name\": \"success\"\n                             },\n                             {\n-                                \"description\": \"If a FlowFile cannot be transformed from the configured input format to the configured output format, the unchanged FlowFile will be routed to this relationship.\",\n+                                \"description\": \"Request FlowFiles transferred when receiving socket communication errors.\",\n                                 \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"The individual Excel 'segments' of the original Excel FlowFile will be routed to this relationship.\",\n-                                \"name\": \"split\"\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                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"split\",\n-                            \"text\"\n+                            \"Workday\",\n+                            \"report\"\n                         ],\n                         \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.excel.SplitExcel\",\n-                        \"typeDescription\": \"Splits a multi sheet Microsoft Excel spreadsheet into multiple Microsoft Excel spreadsheets where each sheet from the original file is converted to an individual spreadsheet in its own flow file.  This processor is currently only capable of processing .xlsx (XSSF 2007 OOXML file format) Excel documents and not older .xls (HSSF '97(-2007) file format) documents.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"All split Excel FlowFiles produced from the same parent Excel FlowFile will have the same randomly generated UUID added for this attribute\",\n-                                \"name\": \"fragment.identifier\"\n-                            },\n-                            {\n-                                \"description\": \"A one-up number that indicates the ordering of the split Excel FlowFiles that were created from a single parent Excel FlowFile\",\n-                                \"name\": \"fragment.index\"\n-                            },\n-                            {\n-                                \"description\": \"The number of split Excel FlowFiles generated from the parent Excel FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"The Java exception class raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.class\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent Excel FlowFile\",\n-                                \"name\": \"segment.original.filename\"\n+                                \"description\": \"The Java exception message raised when the processor fails\",\n+                                \"name\": \"getworkdayreport.java.exception.message\"\n                             },\n                             {\n-                                \"description\": \"The name of the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"sheetname\"\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 number of rows in the Excel sheet from the original spreadsheet.\",\n-                                \"name\": \"total.rows\"\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-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-protobuf-services-nar\",\n+            \"artifact\": \"nifi-aws-service-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-proxy-configuration-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-protobuf-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-proxy-configuration-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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+                            \"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\": \"Message Type\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-server-host\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Proto Directory\": {\n-                                \"description\": \"Directory containing Protocol Buffers message definition (.proto) file(s).\",\n-                                \"displayName\": \"Proto Directory\",\n+                            \"proxy-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\": \"Proto Directory\",\n-                                \"required\": true,\n+                                \"name\": \"proxy-server-port\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"schema-access-strategy\": {\n+                            \"proxy-type\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"The name of the Schema to use is specified by the 'Schema Name' Property. The value of this property is used to lookup the Schema in the configured Schema Registry service.\",\n-                                        \"displayName\": \"Use 'Schema Name' Property\",\n-                                        \"value\": \"schema-name\"\n-                                    },\n-                                    {\n-                                        \"description\": \"The text of the Schema itself is specified by the 'Schema Text' Property. The value of this property must be a valid Avro Schema. If Expression Language is used, the value of the 'Schema Text' property must be valid after substituting the expressions.\",\n-                                        \"displayName\": \"Use 'Schema Text' Property\",\n-                                        \"value\": \"schema-text-property\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"DIRECT\",\n+                                        \"value\": \"DIRECT\"\n                                     },\n                                     {\n-                                        \"description\": \"The 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\": \"HTTP\",\n+                                        \"value\": \"HTTP\"\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\": \"SOCKS\",\n+                                        \"value\": \"SOCKS\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"generate-from-proto-file\",\n-                                \"description\": \"Specifies how to obtain the schema that is to be used for interpreting the data.\",\n-                                \"displayName\": \"Schema Access Strategy\",\n+                                \"defaultValue\": \"DIRECT\",\n+                                \"description\": \"Proxy type.\",\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\": 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+                            \"proxy-user-name\": {\n+                                \"description\": \"The name of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Name\",\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\": \"proxy-user-name\",\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+                            \"proxy-user-password\": {\n+                                \"description\": \"The password of the proxy client for user authentication.\",\n+                                \"displayName\": \"Proxy User Password\",\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\": \"proxy-user-password\",\n                                 \"required\": false,\n-                                \"sensitive\": false\n+                                \"sensitive\": true\n                             },\n-                            \"schema-reference-reader\": {\n-                                \"dependencies\": [\n+                            \"socks-version\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"schema-reference-reader\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS4\",\n+                                        \"value\": \"SOCKS4\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"SOCKS5\",\n+                                        \"value\": \"SOCKS5\"\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-M4\"\n-                                }\n-                            },\n-                            \"schema-registry\": {\n+                                \"defaultValue\": \"SOCKS5\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"schema-reference-reader\",\n-                                            \"schema-name\"\n+                                            \"SOCKS\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Schema Access Strategy\",\n-                                        \"propertyName\": \"schema-access-strategy\"\n+                                        \"propertyDisplayName\": \"Proxy Type\",\n+                                        \"propertyName\": \"proxy-type\"\n                                     }\n                                 ],\n-                                \"description\": \"Specifies the Controller Service to use for the Schema Registry\",\n-                                \"displayName\": \"Schema Registry\",\n+                                \"description\": \"SOCKS Protocol Version\",\n+                                \"displayName\": \"SOCKS Version\",\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-M4\"\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+                                \"name\": \"socks-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.serialization.RecordReaderFactory\",\n+                                \"type\": \"org.apache.nifi.proxy.ProxyConfigurationService\",\n                                 \"version\": \"2.0.0-M4\"\n                             }\n                         ],\n                         \"supportsDynamicProperties\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"parser\",\n-                            \"protobuf\",\n-                            \"reader\",\n-                            \"record\"\n+                            \"Proxy\"\n                         ],\n-                        \"type\": \"org.apache.nifi.services.protobuf.ProtobufReader\",\n-                        \"typeDescription\": \"Parses a Protocol Buffers message from binary format.\",\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-M4\"\n                     }\n                 ],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-dropbox-services-nar\",\n+            \"artifact\": \"nifi-registry-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [\n                     {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-dropbox-services-nar\",\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\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-                                \"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-                            \"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+                        \"dynamicProperties\": [\n                             {\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-M4\"\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-                        \"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-M4\"\n-                    }\n-                ],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-smb-client-api-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [],\n-                \"reportingTasks\": []\n-            },\n-            \"group\": \"org.apache.nifi\",\n-            \"version\": \"2.0.0-M4\"\n-        },\n-        {\n-            \"artifact\": \"nifi-hubspot-nar\",\n-            \"componentManifest\": {\n-                \"controllerServices\": [],\n-                \"flowAnalysisRules\": [],\n-                \"parameterProviders\": [],\n-                \"processors\": [\n-                    {\n-                        \"additionalDetails\": true,\n-                        \"artifact\": \"nifi-hubspot-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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-                                    {\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\": \"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-                                \"sensitive\": false\n-                            },\n-                            \"is-incremental\": {\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\": \"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+                                \"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\": \"is-incremental\",\n+                                \"name\": \"avro-reg-validated-field-names\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            },\n-                            \"object-type\": {\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-registry-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"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+                                        \"description\": \"Draft Version 4\",\n+                                        \"displayName\": \"Draft 4\",\n+                                        \"value\": \"DRAFT_4\"\n                                     },\n                                     {\n-                                        \"description\": \"Get emails on CRM records.\",\n-                                        \"displayName\": \"Emails\",\n-                                        \"value\": \"/crm/v3/objects/emails\"\n+                                        \"description\": \"Draft Version 6\",\n+                                        \"displayName\": \"Draft 6\",\n+                                        \"value\": \"DRAFT_6\"\n                                     },\n                                     {\n-                                        \"description\": \"Get meetings on CRM records.\",\n-                                        \"displayName\": \"Meetings\",\n-                                        \"value\": \"/crm/v3/objects/meetings\"\n+                                        \"description\": \"Draft Version 7\",\n+                                        \"displayName\": \"Draft 7\",\n+                                        \"value\": \"DRAFT_7\"\n                                     },\n                                     {\n-                                        \"description\": \"Get notes on CRM records.\",\n-                                        \"displayName\": \"Notes\",\n-                                        \"value\": \"/crm/v3/objects/notes\"\n+                                        \"description\": \"Draft Version 2019-09\",\n+                                        \"displayName\": \"Draft 2019-09\",\n+                                        \"value\": \"DRAFT_2019_09\"\n                                     },\n                                     {\n-                                        \"description\": \"Get tasks on CRM records.\",\n-                                        \"displayName\": \"Tasks\",\n-                                        \"value\": \"/crm/v3/objects/tasks\"\n+                                        \"description\": \"Draft Version 2020-12\",\n+                                        \"displayName\": \"Draft 2020-12\",\n+                                        \"value\": \"DRAFT_2020_12\"\n                                     }\n                                 ],\n-                                \"description\": \"The HubSpot Object Type requested\",\n-                                \"displayName\": \"Object Type\",\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\": \"object-type\",\n+                                \"name\": \"JSON Schema Version\",\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-                            \"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-M4\"\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-standard-services-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.schemaregistry.services.JsonSchemaRegistry\",\n+                                \"version\": \"2.0.0-M4\"\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-                            \"hubspot\"\n+                            \"json\",\n+                            \"registry\",\n+                            \"schema\"\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-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"Sets the MIME type to application/json\",\n-                                \"name\": \"mime.type\"\n-                            }\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-M4\"\n                     }\n                 ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n             \"artifact\": \"nifi-ssl-context-service-nar\",\n@@ -100670,23 +100387,35 @@\n                 \"processors\": [],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-avro-nar\",\n+            \"artifact\": \"nifi-standard-shared-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-jslt-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-jslt-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -100699,300 +100428,354 @@\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+                            \"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                                 \"allowableValues\": [\n                                     {\n                                         \"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\": \"Apply pretty-print formatting to the output of the JSLT transform\",\n+                                \"displayName\": \"Pretty Print\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Count Items\",\n+                                \"name\": \"jslt-transform-pretty_print\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Fingerprint Algorithm\": {\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\": \"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+                                \"required\": true,\n+                                \"resourceDefinition\": {\n+                                    \"cardinality\": \"SINGLE\",\n+                                    \"resourceTypes\": [\n+                                        \"TEXT\",\n+                                        \"FILE\"\n+                                    ]\n+                                },\n+                                \"sensitive\": false\n+                            },\n+                            \"jslt-transform-transformation-strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"CRC-64-AVRO\",\n-                                        \"value\": \"CRC-64-AVRO\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"MD5\",\n-                                        \"value\": \"MD5\"\n+                                        \"description\": \"Apply transformation to entire FlowFile content JSON\",\n+                                        \"displayName\": \"Entire FlowFile\",\n+                                        \"value\": \"ENTIRE_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SHA-256\",\n-                                        \"value\": \"SHA-256\"\n+                                        \"description\": \"Apply transformation each JSON Object in an array\",\n+                                        \"displayName\": \"Each JSON Object\",\n+                                        \"value\": \"EACH_OBJECT\"\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\": \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Fingerprint Algorithm\",\n+                                \"name\": \"jslt-transform-transformation-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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Metadata Keys\",\n-                                \"required\": false,\n-                                \"sensitive\": false\n                             }\n                         },\n                         \"sideEffectFree\": true,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"A FlowFile is routed to this relationship after metadata has been extracted.\",\n+                                \"description\": \"The FlowFile with transformed content will be routed to this relationship\",\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+                                \"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\": 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-                            \"metadata\",\n-                            \"schema\"\n+                            \"jslt\",\n+                            \"json\",\n+                            \"transform\"\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+                        \"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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The type of the schema (i.e. record, enum, etc.).\",\n-                                \"name\": \"schema.type\"\n-                            },\n-                            {\n-                                \"description\": \"Contains the name when the type is a record, enum or fixed, otherwise contains the name of the primitive type.\",\n-                                \"name\": \"schema.name\"\n-                            },\n-                            {\n-                                \"description\": \"The result of the Fingerprint Algorithm as a Hex string.\",\n-                                \"name\": \"schema.fingerprint\"\n-                            },\n-                            {\n-                                \"description\": \"The total number of items in the datafile, only written if Count Items is set to true.\",\n-                                \"name\": \"item.count\"\n+                                \"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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-opentelemetry-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-avro-nar\",\n+                        \"artifact\": \"nifi-opentelemetry-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\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-                            \"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+                            \"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\": \"Output Size\",\n+                                \"name\": \"Address\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Output Strategy\": {\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\": \"Batch Size\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"Client Authentication\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Avro's object container file format\",\n-                                        \"displayName\": \"Datafile\",\n-                                        \"value\": \"Datafile\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"WANT\",\n+                                        \"value\": \"WANT\"\n                                     },\n                                     {\n-                                        \"description\": \"Bare Avro records\",\n-                                        \"displayName\": \"Bare Record\",\n-                                        \"value\": \"Bare Record\"\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"REQUIRED\",\n+                                        \"value\": \"REQUIRED\"\n+                                    },\n+                                    {\n+                                        \"description\": \"\",\n+                                        \"displayName\": \"NONE\",\n+                                        \"value\": \"NONE\"\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+                                \"defaultValue\": \"WANT\",\n+                                \"description\": \"Client authentication policy for TLS communication with HTTPS\",\n+                                \"displayName\": \"Client Authentication\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Output Strategy\",\n+                                \"name\": \"Client Authentication\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Split Strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"Split at Record boundaries\",\n-                                        \"displayName\": \"Record\",\n-                                        \"value\": \"Record\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"Record\",\n-                                \"description\": \"The strategy for splitting the incoming datafile. The Record strategy will read the incoming datafile by de-serializing each record.\",\n-                                \"displayName\": \"Split Strategy\",\n+                            \"Port\": {\n+                                \"defaultValue\": \"4317\",\n+                                \"description\": \"TCP port number on which to listen for OTLP Export Service Requests over HTTP and gRPC\",\n+                                \"displayName\": \"Port\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Split Strategy\",\n+                                \"name\": \"Port\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Transfer Metadata\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n-                                    }\n-                                ],\n-                                \"defaultValue\": \"true\",\n-                                \"description\": \"Whether or not to transfer metadata from the parent datafile to the children. If the Output Strategy is Bare Record, then the metadata will be stored as FlowFile attributes, otherwise it will be in the Datafile header.\",\n-                                \"displayName\": \"Transfer Metadata\",\n+                            \"Queue Capacity\": {\n+                                \"defaultValue\": \"1000\",\n+                                \"description\": \"Maximum number of OTLP request resource elements that can be received and queued\",\n+                                \"displayName\": \"Queue Capacity\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Transfer Metadata\",\n+                                \"name\": \"Queue Capacity\",\n+                                \"required\": true,\n+                                \"sensitive\": false\n+                            },\n+                            \"SSL Context Service\": {\n+                                \"description\": \"SSL Context Service enables TLS communication for HTTPS\",\n+                                \"displayName\": \"SSL Context Service\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": true,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n+                            },\n+                            \"Worker Threads\": {\n+                                \"defaultValue\": \"2\",\n+                                \"description\": \"Number of threads responsible for decoding and queuing incoming OTLP Export Service Requests\",\n+                                \"displayName\": \"Worker Threads\",\n+                                \"dynamic\": false,\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Worker Threads\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             }\n                         },\n-                        \"sideEffectFree\": true,\n+                        \"sideEffectFree\": false,\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"If a FlowFile fails processing for any reason (for example, the FlowFile is not valid Avro), it will be routed to this relationship\",\n-                                \"name\": \"failure\"\n-                            },\n-                            {\n-                                \"description\": \"The original FlowFile that was split. If the FlowFile fails processing, nothing will be sent to this relationship\",\n-                                \"name\": \"original\"\n-                            },\n-                            {\n-                                \"description\": \"All new files split from the original FlowFile will be routed to this relationship\",\n-                                \"name\": \"split\"\n+                                \"description\": \"Export Service Requests containing OTLP Telemetry\",\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\": \"An instance of this component can cause high usage of this system resource.  Multiple instances or high concurrency settings may result a degradation of performance.\",\n-                                \"resource\": \"MEMORY\"\n-                            }\n-                        ],\n                         \"tags\": [\n-                            \"avro\",\n-                            \"split\"\n+                            \"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.avro.SplitAvro\",\n-                        \"typeDescription\": \"Splits a binary encoded Avro datafile into smaller files based on the configured Output Size. The Output Strategy determines if the smaller files will be Avro datafiles, or bare Avro records with metadata in the FlowFile attributes. The output will always be binary encoded.\",\n+                        \"type\": \"org.apache.nifi.processors.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-M4\",\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+                                \"description\": \"Content-Type set to application/json\",\n+                                \"name\": \"mime.type\"\n                             },\n                             {\n-                                \"description\": \"The number of split FlowFiles generated from the parent FlowFile\",\n-                                \"name\": \"fragment.count\"\n+                                \"description\": \"OpenTelemetry Resource Type: LOGS, METRICS, or TRACES\",\n+                                \"name\": \"resource.type\"\n                             },\n                             {\n-                                \"description\": \"The filename of the parent FlowFile\",\n-                                \"name\": \"segment.original.filename \"\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-M4\"\n         },\n         {\n-            \"artifact\": \"nifi-smb-nar\",\n+            \"artifact\": \"nifi-standard-services-api-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-compress-nar\",\n             \"componentManifest\": {\n                 \"controllerServices\": [],\n                 \"flowAnalysisRules\": [],\n                 \"parameterProviders\": [],\n                 \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-compress-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -101005,866 +100788,969 @@\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+                            \"Input Compression Strategy\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Leaves the file as-is.\",\n-                                        \"displayName\": \"None\",\n-                                        \"value\": \"NONE\"\n+                                        \"description\": \"No Compression\",\n+                                        \"displayName\": \"no compression\",\n+                                        \"value\": \"no compression\"\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\": \"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\": \"Deletes the file from the remote system.\",\n-                                        \"displayName\": \"Delete File\",\n-                                        \"value\": \"DELETE\"\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-                                \"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\": \"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\": \"Completion Strategy\",\n+                                \"name\": \"Input Compression Strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Destination Directory\": {\n+                            \"Output Compression Level\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n+                                        \"displayName\": \"0\",\n+                                        \"value\": \"0\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\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\": \"false\",\n+                                \"defaultValue\": \"1\",\n                                 \"dependencies\": [\n                                     {\n                                         \"dependentValues\": [\n-                                            \"MOVE\"\n+                                            \"zstd\",\n+                                            \"use mime.type attribute\",\n+                                            \"deflate\",\n+                                            \"brotli\",\n+                                            \"gzip\",\n+                                            \"xz-lzma2\"\n                                         ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\n+                                        \"propertyDisplayName\": \"Output Compression Strategy\",\n+                                        \"propertyName\": \"Output Compression 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+                                \"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\": \"Create Destination Directory\",\n+                                \"name\": \"Output Compression Level\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Destination Directory\": {\n-                                \"dependencies\": [\n+                            \"Output Compression Strategy\": {\n+                                \"allowableValues\": [\n                                     {\n-                                        \"dependentValues\": [\n-                                            \"MOVE\"\n-                                        ],\n-                                        \"propertyDisplayName\": \"Completion Strategy\",\n-                                        \"propertyName\": \"Completion Strategy\"\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-                                \"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+                                \"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\": \"remote-file\",\n+                                \"expressionLanguageScope\": \"NONE\",\n+                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n+                                \"name\": \"Output Compression Strategy\",\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+                            \"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\": \"smb-client-provider-service\",\n+                                \"name\": \"Output Filename Strategy\",\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-M4\"\n-                                }\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+                        \"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\": \"A FlowFile will be routed here for each successfully fetched file.\",\n-                                \"name\": \"success\"\n+                                \"description\": \"FlowFiles will be transferred to the failure relationship on compression modification errors\",\n+                                \"name\": \"failure\"\n                             },\n                             {\n-                                \"description\": \"A FlowFile will be routed here when failed to fetch its content.\",\n-                                \"name\": \"failure\"\n+                                \"description\": \"FlowFiles will be transferred to the success relationship on compression modification success\",\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+                        \"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-                            \"cifs\",\n-                            \"fetch\",\n-                            \"files\",\n-                            \"samba\",\n-                            \"smb\"\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.smb.FetchSmb\",\n-                        \"typeDescription\": \"Fetches files from a SMB Share. Designed to be used in tandem with ListSmb.\",\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-M4\",\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+                                \"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-                    },\n+                    }\n+                ],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-flow-registry-client-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [],\n+                \"reportingTasks\": []\n+            },\n+            \"group\": \"org.apache.nifi\",\n+            \"version\": \"2.0.0-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-redis-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-redis-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n-                        \"defaultBulletinLevel\": \"WARN\",\n-                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n-                            \"CRON_DRIVEN\": 1,\n-                            \"TIMER_DRIVEN\": 1\n-                        },\n-                        \"defaultPenaltyDuration\": \"30 sec\",\n-                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n-                            \"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+                            \"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\": \"Batch Size\",\n+                                \"name\": \"Cluster Max Redirects\",\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+                            \"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\": \"Domain\",\n-                                \"required\": false,\n+                                \"name\": \"Communication Timeout\",\n+                                \"required\": true,\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+                            \"Connection String\": {\n+                                \"description\": \"The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.\",\n+                                \"displayName\": \"Connection String\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"File Filter\",\n-                                \"required\": false,\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Connection String\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n+                                \"expressionLanguageScope\": \"ENVIRONMENT\",\n+                                \"expressionLanguageScopeDescription\": \"Environment variables defined at JVM level and system properties\",\n+                                \"name\": \"Database Index\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Ignore Hidden Files\": {\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\": \"Password\",\n+                                \"required\": false,\n+                                \"sensitive\": true\n+                            },\n+                            \"Pool - Block When Exhausted\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"true\",\n-                                \"description\": \"Indicates whether or not hidden files should be ignored\",\n-                                \"displayName\": \"Ignore Hidden Files\",\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\": \"Ignore Hidden Files\",\n+                                \"name\": \"Pool - Block When Exhausted\",\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+                            \"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\": \"Keep Source File\",\n+                                \"name\": \"Pool - Max Idle\",\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+                            \"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\": \"Password\",\n-                                \"required\": false,\n-                                \"sensitive\": true\n+                                \"name\": \"Pool - Max Total\",\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+                            \"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\": \"Path Filter\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Max Wait Time\",\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+                            \"Pool - Min Evictable Idle Time\": {\n+                                \"defaultValue\": \"60 seconds\",\n+                                \"description\": \"The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.\",\n+                                \"displayName\": \"Pool - Min Evictable Idle Time\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Polling Interval\",\n+                                \"name\": \"Pool - Min Evictable Idle Time\",\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+                            \"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\": \"Recurse Subdirectories\",\n+                                \"name\": \"Pool - Min Idle\",\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+                            \"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\": \"Share\",\n+                                \"name\": \"Pool - Num Tests Per Eviction Run\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\n+                            \"Pool - Test On Borrow\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the read. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\n+                                \"defaultValue\": \"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\": \"Share Access Strategy\",\n+                                \"name\": \"Pool - Test On Borrow\",\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+                            \"Pool - Test On Create\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n                                 \"defaultValue\": \"false\",\n-                                \"description\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\n+                                \"description\": \"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\": \"enable-dfs\",\n+                                \"name\": \"Pool - Test On Create\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\n+                            \"Pool - Test On Return\": {\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-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"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\": \"timeout\",\n+                                \"name\": \"Pool - Test On Return\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n+                            \"Pool - Test While Idle\": {\n                                 \"allowableValues\": [\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"true\",\n                                         \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n                                         \"displayName\": \"false\",\n                                         \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"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+                                \"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\": \"use-encryption\",\n+                                \"name\": \"Pool - Test While Idle\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n-                            }\n-                        },\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n-                        ],\n-                        \"sideEffectFree\": false,\n-                        \"supportedRelationships\": [\n-                            {\n-                                \"description\": \"All files are routed to success\",\n-                                \"name\": \"success\"\n-                            }\n-                        ],\n-                        \"supportedSchedulingStrategies\": [\n-                            \"TIMER_DRIVEN\",\n-                            \"CRON_DRIVEN\"\n-                        ],\n-                        \"supportsBatching\": false,\n-                        \"supportsDynamicProperties\": false,\n-                        \"supportsDynamicRelationships\": false,\n-                        \"supportsSensitiveDynamicProperties\": false,\n-                        \"tags\": [\n-                            \"samba, smb, cifs, files, get\"\n-                        ],\n-                        \"triggerSerially\": false,\n-                        \"triggerWhenAnyDestinationAvailable\": false,\n-                        \"triggerWhenEmpty\": true,\n-                        \"type\": \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                        \"typeDescription\": \"Reads file from a samba network location to FlowFiles. Use this processor instead of a cifs mounts if share access control is important. Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n-                        \"useCases\": [],\n-                        \"version\": \"2.0.0-M4\",\n-                        \"writesAttributes\": [\n-                            {\n-                                \"description\": \"The filename is set to the name of the file on the network share\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's network share name. For example, if the input is set to \\\\\\\\hostname\\\\share\\\\tmp, files picked up from \\\\tmp will have the path attribute set to tmp\",\n-                                \"name\": \"path\"\n-                            },\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 full path from where a file was picked up. This includes the hostname and the share name\",\n-                                \"name\": \"absolute.path\"\n-                            }\n-                        ]\n-                    },\n-                    {\n-                        \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n-                        \"buildInfo\": {\n-                            \"revision\": \"19c5be0\"\n-                        },\n-                        \"defaultBulletinLevel\": \"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-                            \"directory\": {\n-                                \"description\": \"The network folder from which to list files. This is the remaining relative path after the share: smb://HOSTNAME:PORT/SHARE/[DIRECTORY]/sub/directories. It is also possible to add subdirectories. The given path on the remote file share must exist. This can be checked using verification. You may mix Windows and Linux-style directory separators.\",\n-                                \"displayName\": \"Input Directory\",\n+                            \"Pool - Time Between Eviction Runs\": {\n+                                \"defaultValue\": \"30 seconds\",\n+                                \"description\": \"The amount of time between attempting to evict idle connections from the pool.\",\n+                                \"displayName\": \"Pool - Time Between Eviction Runs\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"directory\",\n-                                \"required\": false,\n+                                \"name\": \"Pool - Time Between Eviction Runs\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-initial-listing-target\": {\n+                            \"Redis Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"Ignore entities having timestamp older than the specified 'Tracking Time Window' at the initial listing activity.\",\n-                                        \"displayName\": \"Tracking Time Window\",\n-                                        \"value\": \"window\"\n+                                        \"description\": \"A single standalone Redis instance.\",\n+                                        \"displayName\": \"Standalone\",\n+                                        \"value\": \"Standalone\"\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\": \"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\": \"all\",\n-                                \"description\": \"Specify how initial listing should be handled. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking Initial Listing Target\",\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\": \"et-initial-listing-target\",\n-                                \"required\": false,\n+                                \"name\": \"Redis Mode\",\n+                                \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"et-state-cache\": {\n-                                \"description\": \"Listed entities are stored in the specified cache storage so that this processor can resume listing across NiFi restart or in case of primary node change. 'Tracking Entities' strategy require tracking information of all listed entities within the last 'Tracking Time Window'. To support large number of entities, the strategy uses DistributedMapCache instead of managed state. Cache key format is 'ListedEntities::{processorId}(::{nodeId})'. If it tracks per node listed entities, then the optional '::{nodeId}' part is added to manage state separately. E.g. cluster wide cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b', per node cache key = 'ListedEntities::8dda2321-0164-1000-50fa-3042fe7d6a7b::nifi-node3' The stored cache content is Gzipped JSON string. The cache key will be deleted when target listing configuration is changed. Used by 'Tracking Entities' strategy.\",\n-                                \"displayName\": \"Entity Tracking State Cache\",\n+                            \"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\": \"et-state-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.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"type\": \"org.apache.nifi.ssl.RestrictedSSLContextService\",\n                                     \"version\": \"2.0.0-M4\"\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+                            \"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\": \"et-time-window\",\n+                                \"name\": \"Sentinel Master\",\n                                 \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"file-name-suffix-filter\": {\n-                                \"description\": \"Files ending with the given suffix will be omitted. Can be used to make sure that files that are still uploading are not listed multiple times, by having those files have a suffix and remove the suffix once the upload finishes. This is highly recommended when using 'Tracking Entities' or 'Tracking Timestamps' listing strategies.\",\n-                                \"displayName\": \"File Name Suffix Filter\",\n+                            \"Sentinel Password\": {\n+                                \"description\": \"The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.\",\n+                                \"displayName\": \"Sentinel Password\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"file-name-suffix-filter\",\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-                            \"listing-strategy\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"This strategy tracks information of all the listed entities within the latest 'Entity Tracking Time Window' to determine new/updated entities. This strategy can pick entities having old timestamp that can be missed with 'Tracking Timestamps'. Works even when multiple subdirectories are being written at the same time while listing is running. However additional DistributedMapCache controller service is required and more JVM heap memory is used. See the description of 'Entity Tracking Time Window' property for further details on how it works.\",\n-                                        \"displayName\": \"Tracking Entities\",\n-                                        \"value\": \"entities\"\n-                                    },\n-                                    {\n-                                        \"description\": \"This strategy lists an entity without any tracking. The same entity will be listed each time on executing this processor. It is recommended to change the default run schedule value. Any property that related to the persisting state will be disregarded.\",\n-                                        \"displayName\": \"No Tracking\",\n-                                        \"value\": \"none\"\n-                                    },\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-                                \"defaultValue\": \"timestamps\",\n-                                \"description\": \"Specify how to determine new/updated entities. See each strategy descriptions for detail.\",\n-                                \"displayName\": \"Listing Strategy\",\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+                                \"artifact\": \"nifi-redis-service-api-nar\",\n+                                \"group\": \"org.apache.nifi\",\n+                                \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n+                                \"version\": \"2.0.0-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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\": \"listing-strategy\",\n+                                \"name\": \"redis-cache-ttl\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"max-file-age\": {\n-                                \"description\": \"Any file older than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Age\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-age\",\n-                                \"required\": false,\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-M4\"\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-M4\"\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-M4\"\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-M4\"\n+                    },\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\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-                            \"max-file-size\": {\n-                                \"description\": \"Any file larger than the given value will be omitted.\",\n-                                \"displayName\": \"Maximum File Size\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"max-file-size\",\n-                                \"required\": false,\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-M4\"\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-M4\"\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-M4\"\n+                    }\n+                ],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n+                    {\n+                        \"additionalDetails\": false,\n+                        \"artifact\": \"nifi-redis-nar\",\n+                        \"buildInfo\": {\n+                            \"revision\": \"19c5be0\"\n+                        },\n+                        \"defaultBulletinLevel\": \"WARN\",\n+                        \"defaultConcurrentTasksBySchedulingStrategy\": {\n+                            \"CRON_DRIVEN\": 1,\n+                            \"TIMER_DRIVEN\": 1\n+                        },\n+                        \"defaultPenaltyDuration\": \"30 sec\",\n+                        \"defaultSchedulingPeriodBySchedulingStrategy\": {\n+                            \"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-                            \"min-file-age\": {\n-                                \"defaultValue\": \"5 secs\",\n-                                \"description\": \"The minimum age that a file must be in order to be listed; any file younger than this amount of time will be ignored.\",\n-                                \"displayName\": \"Minimum File Age\",\n+                            \"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\": \"min-file-age\",\n+                                \"name\": \"data-record-path\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"min-file-size\": {\n-                                \"description\": \"Any file smaller than the given value will be omitted.\",\n-                                \"displayName\": \"Minimum File Size\",\n+                            \"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\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"min-file-size\",\n-                                \"required\": false,\n+                                \"name\": \"hash-value-record-path\",\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+                            \"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-writer\",\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.serialization.RecordSetWriterFactory\",\n+                                    \"type\": \"org.apache.nifi.serialization.RecordReaderFactory\",\n                                     \"version\": \"2.0.0-M4\"\n                                 }\n                             },\n-                            \"smb-client-provider-service\": {\n-                                \"description\": \"Specifies the SMB client provider to use for creating SMB connections.\",\n-                                \"displayName\": \"SMB Client Provider Service\",\n+                            \"redis-connection-pool\": {\n+                                \"description\": \"\",\n+                                \"displayName\": \"Redis Connection Pool\",\n                                 \"dynamic\": false,\n                                 \"expressionLanguageScope\": \"NONE\",\n                                 \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-client-provider-service\",\n+                                \"name\": \"redis-connection-pool\",\n                                 \"required\": true,\n                                 \"sensitive\": false,\n                                 \"typeProvidedByValue\": {\n-                                    \"artifact\": \"nifi-smb-client-api-nar\",\n+                                    \"artifact\": \"nifi-redis-service-api-nar\",\n                                     \"group\": \"org.apache.nifi\",\n-                                    \"type\": \"org.apache.nifi.services.smb.SmbClientProviderService\",\n+                                    \"type\": \"org.apache.nifi.redis.RedisConnectionPool\",\n                                     \"version\": \"2.0.0-M4\"\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.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.PutSmbFile\"\n-                        ],\n                         \"sideEffectFree\": false,\n-                        \"stateful\": {\n-                            \"description\": \"After performing a listing of files, the state of the previous listing can be stored in order to list files continuously without duplication.\",\n-                            \"scopes\": [\n-                                \"CLUSTER\"\n-                            ]\n-                        },\n                         \"supportedRelationships\": [\n                             {\n-                                \"description\": \"All FlowFiles that are received are routed to success\",\n+                                \"description\": \"FlowFiles having all Records stored in Redis will be routed to this relationship\",\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-                            \"list\",\n-                            \"samba, smb, cifs, files\"\n+                            \"hash\",\n+                            \"put\",\n+                            \"record\",\n+                            \"redis\"\n                         ],\n-                        \"triggerSerially\": true,\n+                        \"triggerSerially\": false,\n                         \"triggerWhenAnyDestinationAvailable\": false,\n                         \"triggerWhenEmpty\": false,\n-                        \"type\": \"org.apache.nifi.processors.smb.ListSmb\",\n-                        \"typeDescription\": \"Lists concrete files shared via SMB protocol. Each listed file may result in one flowfile, the metadata being written as flowfile attributes. Or - in case the 'Record Writer' property is set - the entire result is written as records to a single flowfile. This Processor is designed to run on Primary Node only in a cluster. If the primary node changes, the new Primary Node will pick up where the previous node left off without duplicating all of the data.\",\n+                        \"type\": \"org.apache.nifi.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-M4\",\n                         \"writesAttributes\": [\n                             {\n-                                \"description\": \"The name of the file that was read from filesystem.\",\n-                                \"name\": \"filename\"\n-                            },\n-                            {\n-                                \"description\": \"The short name of the file that was read from filesystem.\",\n-                                \"name\": \"shortName\"\n-                            },\n-                            {\n-                                \"description\": \"The path is set to the relative path of the file's directory on the remote filesystem compared to the Share root directory. For example, for a given remote locationsmb://HOSTNAME:PORT/SHARE/DIRECTORY, and a file is being listed from smb://HOSTNAME:PORT/SHARE/DIRECTORY/sub/folder/file then the path attribute will be set to \\\"DIRECTORY/sub/folder\\\".\",\n-                                \"name\": \"path\"\n-                            },\n-                            {\n-                                \"description\": \"The SMB URL of the share.\",\n-                                \"name\": \"serviceLocation\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's content changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastModifiedTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was created in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"creationTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file was accessed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"lastAccessTime\"\n-                            },\n-                            {\n-                                \"description\": \"The timestamp of when the file's attributes was changed in the filesystem as 'yyyy-MM-dd'T'HH:mm:ss'.\",\n-                                \"name\": \"changeTime\"\n-                            },\n-                            {\n-                                \"description\": \"The size of the file in bytes.\",\n-                                \"name\": \"size\"\n-                            },\n-                            {\n-                                \"description\": \"The number of bytes allocated for the file on the server.\",\n-                                \"name\": \"allocationSize\"\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-M4\"\n+        },\n+        {\n+            \"artifact\": \"nifi-cdc-mysql-nar\",\n+            \"componentManifest\": {\n+                \"controllerServices\": [],\n+                \"flowAnalysisRules\": [],\n+                \"parameterProviders\": [],\n+                \"processors\": [\n                     {\n                         \"additionalDetails\": false,\n-                        \"artifact\": \"nifi-smb-nar\",\n+                        \"artifact\": \"nifi-cdc-mysql-nar\",\n                         \"buildInfo\": {\n                             \"revision\": \"19c5be0\"\n                         },\n                         \"defaultBulletinLevel\": \"WARN\",\n                         \"defaultConcurrentTasksBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": 1,\n                             \"TIMER_DRIVEN\": 1\n@@ -101872,325 +101758,439 @@\n                         \"defaultPenaltyDuration\": \"30 sec\",\n                         \"defaultSchedulingPeriodBySchedulingStrategy\": {\n                             \"CRON_DRIVEN\": \"* * * * * ?\",\n                             \"TIMER_DRIVEN\": \"0 sec\"\n                         },\n                         \"defaultSchedulingStrategy\": \"TIMER_DRIVEN\",\n                         \"defaultYieldDuration\": \"1 sec\",\n+                        \"explicitRestrictions\": [\n+                            {\n+                                \"explanation\": \"Database Driver Location can reference resources over HTTP\",\n+                                \"requiredPermission\": \"reference remote resources\"\n+                            }\n+                        ],\n                         \"group\": \"org.apache.nifi\",\n-                        \"inputRequirement\": \"INPUT_REQUIRED\",\n+                        \"inputRequirement\": \"INPUT_FORBIDDEN\",\n                         \"multiProcessorUseCases\": [],\n-                        \"primaryNodeOnly\": false,\n+                        \"primaryNodeOnly\": true,\n                         \"propertyDescriptors\": {\n-                            \"Batch Size\": {\n-                                \"defaultValue\": \"100\",\n-                                \"description\": \"The maximum number of files to put in each iteration\",\n-                                \"displayName\": \"Batch Size\",\n+                            \"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\": \"Batch Size\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n+                                \"name\": \"SSL Context Service\",\n+                                \"required\": false,\n+                                \"sensitive\": false,\n+                                \"typeProvidedByValue\": {\n+                                    \"artifact\": \"nifi-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.ssl.SSLContextService\",\n+                                    \"version\": \"2.0.0-M4\"\n+                                }\n                             },\n-                            \"Conflict Resolution Strategy\": {\n+                            \"SSL Mode\": {\n                                 \"allowableValues\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"replace\",\n-                                        \"value\": \"replace\"\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-standard-services-api-nar\",\n+                                    \"group\": \"org.apache.nifi\",\n+                                    \"type\": \"org.apache.nifi.distributed.cache.client.DistributedMapCacheClient\",\n+                                    \"version\": \"2.0.0-M4\"\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+                                \"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+                            \"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\": \"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\": \"ignore\",\n-                                        \"value\": \"ignore\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"fail\",\n-                                        \"value\": \"fail\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"replace\",\n-                                \"description\": \"Indicates what should happen when a file with the same name already exists in the output directory\",\n-                                \"displayName\": \"Conflict Resolution Strategy\",\n+                                \"defaultValue\": \"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\": \"Conflict Resolution Strategy\",\n+                                \"name\": \"capture-change-mysql-include-begin-commit\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Create Missing Directories\": {\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\": \"If true, then missing destination directories will be created. If false, flowfiles are penalized and sent to failure.\",\n-                                \"displayName\": \"Create Missing Directories\",\n+                                \"description\": \"Specifies whether 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\": \"Create Missing Directories\",\n+                                \"name\": \"capture-change-mysql-include-ddl-events\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Directory\": {\n-                                \"description\": \"The network folder to which files should be written. This is the remaining relative path after the share: \\\\\\\\hostname\\\\share\\\\[dir1\\\\dir2]. You may use expression language.\",\n-                                \"displayName\": \"Directory\",\n+                            \"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\": \"FLOWFILE_ATTRIBUTES\",\n-                                \"expressionLanguageScopeDescription\": \"Environment variables and FlowFile Attributes\",\n-                                \"name\": \"Directory\",\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-                            \"Domain\": {\n-                                \"description\": \"The domain used for authentication. Optional, in most cases username and password is sufficient.\",\n-                                \"displayName\": \"Domain\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Domain\",\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-                            \"Hostname\": {\n-                                \"description\": \"The network host to which files should be written.\",\n-                                \"displayName\": \"Hostname\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Hostname\",\n-                                \"required\": true,\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-                            \"Password\": {\n-                                \"description\": \"The password used for authentication. Required if Username is set.\",\n-                                \"displayName\": \"Password\",\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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Password\",\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\": 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+                            \"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\": \"Share\",\n-                                \"required\": true,\n+                                \"name\": \"capture-change-mysql-name-pattern\",\n+                                \"required\": false,\n                                 \"sensitive\": false\n                             },\n-                            \"Share Access Strategy\": {\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\": \"none\",\n-                                        \"value\": \"none\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read\",\n-                                        \"value\": \"read\"\n-                                    },\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"read, delete\",\n-                                        \"value\": \"read, delete\"\n+                                        \"displayName\": \"true\",\n+                                        \"value\": \"true\"\n                                     },\n                                     {\n                                         \"description\": \"\",\n-                                        \"displayName\": \"read, write, delete\",\n-                                        \"value\": \"read, write, delete\"\n+                                        \"displayName\": \"false\",\n+                                        \"value\": \"false\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"none\",\n-                                \"description\": \"Indicates which shared access are granted on the file during the write. None is the most restrictive, but the safest setting to prevent corruption.\",\n-                                \"displayName\": \"Share Access Strategy\",\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\": \"Share Access Strategy\",\n+                                \"name\": \"capture-change-mysql-retrieve-all-records\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"Temporary Suffix\": {\n-                                \"description\": \"A temporary suffix which will be apended to the filename while it's transfering. After the transfer is complete, the suffix will be removed.\",\n-                                \"displayName\": \"Temporary Suffix\",\n+                            \"capture-change-mysql-server-id\": {\n+                                \"description\": \"The client connecting to the MySQL replication group is actually a simplified replica (server), and the Server ID value must be unique across the whole replication group (i.e. different from any other Server ID being used by any primary or replica). Thus, each instance of CaptureChangeMySQL must have a Server ID unique across the replication group. If the Server ID is not specified, it defaults to 65535.\",\n+                                \"displayName\": \"Server ID\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Temporary Suffix\",\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-                            \"Username\": {\n-                                \"description\": \"The username used for authentication. If no username is set then anonymous authentication is attempted.\",\n-                                \"displayName\": \"Username\",\n+                            \"capture-change-mysql-state-update-interval\": {\n+                                \"defaultValue\": \"0 seconds\",\n+                                \"description\": \"DEPRECATED. This property is no longer used and exists solely for backward compatibility purposes. Indicates how often to update the processor's state with binlog file/position values. A value of zero means that state will only be updated when the processor is stopped or shutdown. If at some point the processor state does not contain the desired binlog values, the last flow file emitted will contain the last observed values, and the processor can be returned to that state by using the Initial Binlog File, Initial Binlog Position, and Initial Sequence ID properties.\",\n+                                \"displayName\": \"State Update Interval\",\n                                 \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"Username\",\n-                                \"required\": 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-                            \"enable-dfs\": {\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\": \"Enables accessing Distributed File System (DFS) and following DFS links during SMB operations.\",\n-                                \"displayName\": \"Enable DFS\",\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\": \"enable-dfs\",\n+                                \"name\": \"capture-change-mysql-use-gtid\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"smb-dialect\": {\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\": \"\",\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+                                        \"description\": \"This strategy causes at most the number of events specified in the 'Number of Events Per FlowFile' property to be written per FlowFile. If the processor is stopped before the specified number of events has been written (or the event queue becomes empty), the fewer number of events will still be written as a FlowFile before stopping.\",\n+                                        \"displayName\": \"Max Events Per FlowFile\",\n+                                        \"value\": \"MAX_EVENTS_PER_FLOWFILE\"\n                                     },\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"SMB 3.1.1\",\n-                                        \"value\": \"SMB_3_1_1\"\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\": \"AUTO\",\n-                                \"description\": \"The SMB dialect is negotiated between the client and the server by default to the highest common version supported by both end. In some rare cases, the client-server communication may fail with the automatically negotiated dialect. This property can be used to set the dialect explicitly (e.g. to downgrade to a lower version), when those situations would occur.\",\n-                                \"displayName\": \"SMB Dialect\",\n-                                \"dynamic\": false,\n-                                \"expressionLanguageScope\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"smb-dialect\",\n-                                \"required\": true,\n-                                \"sensitive\": false\n-                            },\n-                            \"timeout\": {\n-                                \"defaultValue\": \"5 sec\",\n-                                \"description\": \"Timeout for read and write operations.\",\n-                                \"displayName\": \"Timeout\",\n+                                \"defaultValue\": \"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\": \"timeout\",\n+                                \"name\": \"events-per-flowfile-strategy\",\n                                 \"required\": true,\n                                 \"sensitive\": false\n                             },\n-                            \"use-encryption\": {\n-                                \"allowableValues\": [\n-                                    {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"true\",\n-                                        \"value\": \"true\"\n-                                    },\n+                            \"number-of-events-per-flowfile\": {\n+                                \"defaultValue\": \"1\",\n+                                \"dependencies\": [\n                                     {\n-                                        \"description\": \"\",\n-                                        \"displayName\": \"false\",\n-                                        \"value\": \"false\"\n+                                        \"dependentValues\": [\n+                                            \"MAX_EVENTS_PER_FLOWFILE\"\n+                                        ],\n+                                        \"propertyDisplayName\": \"Event Processing Strategy\",\n+                                        \"propertyName\": \"events-per-flowfile-strategy\"\n                                     }\n                                 ],\n-                                \"defaultValue\": \"false\",\n-                                \"description\": \"Turns on/off encrypted communication between the client and the server. The property's behavior is SMB dialect dependent: SMB 2.x does not support encryption and the property has no effect. In case of SMB 3.x, it is a hint/request to the server to turn encryption on if the server also supports it.\",\n-                                \"displayName\": \"Use Encryption\",\n+                                \"description\": \"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\": \"NONE\",\n-                                \"expressionLanguageScopeDescription\": \"Not Supported\",\n-                                \"name\": \"use-encryption\",\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-                        \"readsAttributes\": [\n-                            {\n-                                \"description\": \"The filename to use when writing the FlowFile to the network folder.\",\n-                                \"name\": \"filename\"\n-                            }\n-                        ],\n-                        \"seeAlso\": [\n-                            \"org.apache.nifi.processors.smb.FetchSmb\",\n-                            \"org.apache.nifi.processors.smb.GetSmbFile\",\n-                            \"org.apache.nifi.processors.smb.ListSmb\"\n-                        ],\n+                        \"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\": \"Files that have been successfully written to the output network path are transferred to this relationship\",\n+                                \"description\": \"Successfully created FlowFile from SQL query result set.\",\n                                 \"name\": \"success\"\n-                            },\n-                            {\n-                                \"description\": \"Files that could not be written to the output network path for some reason are transferred to this relationship\",\n-                                \"name\": \"failure\"\n                             }\n                         ],\n                         \"supportedSchedulingStrategies\": [\n                             \"TIMER_DRIVEN\",\n                             \"CRON_DRIVEN\"\n                         ],\n                         \"supportsBatching\": false,\n                         \"supportsDynamicProperties\": false,\n                         \"supportsDynamicRelationships\": false,\n                         \"supportsSensitiveDynamicProperties\": false,\n                         \"tags\": [\n-                            \"samba, smb, cifs, files, put\"\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.smb.PutSmbFile\",\n-                        \"typeDescription\": \"Writes the contents of a FlowFile to a samba network location. Use this processor instead of a cifs mounts if share access control is important.Configure the Hostname, Share and Directory accordingly: \\\\\\\\[Hostname]\\\\[Share]\\\\[path\\\\to\\\\Directory]\",\n+                        \"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-M4\"\n+                        \"version\": \"2.0.0-M4\",\n+                        \"writesAttributes\": [\n+                            {\n+                                \"description\": \"A sequence identifier (i.e. strictly increasing integer value) specifying the order of the CDC event flow file relative to the other event flow file(s).\",\n+                                \"name\": \"cdc.sequence.id\"\n+                            },\n+                            {\n+                                \"description\": \"A string indicating the type of CDC event that occurred, including (but not limited to) 'begin', 'insert', 'update', 'delete', 'ddl' and 'commit'.\",\n+                                \"name\": \"cdc.event.type\"\n+                            },\n+                            {\n+                                \"description\": \"The processor outputs flow file content in JSON format, and sets the mime.type attribute to application/json\",\n+                                \"name\": \"mime.type\"\n+                            }\n+                        ]\n                     }\n                 ],\n                 \"reportingTasks\": []\n             },\n             \"group\": \"org.apache.nifi\",\n             \"version\": \"2.0.0-M4\"\n         }\n"}]}]}
